Autore Topic: connessione database  (Letto 4125 volte)

  • Visitatore
Re: connessione database
« Risposta #15 il: 02 Marzo 2008, 20:44:57 »
ho installato knoda.
ma non è presente un driver per sqlite,solo per mysql.
vedrò da terminale di creare un db con sqlite3.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: connessione database
« Risposta #16 il: 02 Marzo 2008, 23:43:32 »
Non dovrebbe... ma hai qualche altra applicazione che stà usando quel db ?

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: connessione database
« Risposta #17 il: 03 Marzo 2008, 00:09:29 »
Con:

   Resultado = Conexion.Find("TTestGambas")

ti dà errore perchè hai scritto:

   Resultado AS Connection

invece di:

   Resultado AS Result

vedrai che funziona anche con Exec !

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: connessione database
« Risposta #18 il: 03 Marzo 2008, 10:03:07 »
@Alejandro:
Knoda ha il driver per Sqlite3, io lo uso abitualmente.

@md9327:
è vero, non avevo visto l'errore del nostro amico :-P
Visita il mio sito personale: http://www.leonardomiliani.com

  • Visitatore
Re: connessione database
« Risposta #19 il: 03 Marzo 2008, 18:00:33 »
Codice: [Seleziona]

Resultado AS Connection

errore di trascrizione,come da codice reale:
Codice: [Seleziona]

PUBLIC Conexion AS Connection
PUBLIC Resultado AS Result

PUBLIC SUB _new()
'''''''''''''''''
END

PUBLIC SUB Form_Open()
ME.Center
clvGestionColumna.Columns.Count = 8
clvGestionColumna.Columns[0].Text = "Index"
clvGestionColumna.Columns[0].Width = 100
clvGestionColumna.Columns[1].Text = "Apellido"
clvGestionColumna.Columns[1].Width = 200
clvGestionColumna.Columns[2].Text = "Nombre"
clvGestionColumna.Columns[2].Width = 200
clvGestionColumna.Columns[3].Text = "Fecha (nac)"
clvGestionColumna.Columns[3].Width = 100
clvGestionColumna.Columns[4].Text = "Ciudad(nac)"
clvGestionColumna.Columns[4].Width = 180
clvGestionColumna.Columns[5].Text = "Provincia(nac)"
clvGestionColumna.Columns[5].Width = 180
clvGestionColumna.Columns[6].Text = "Region(nac)"
clvGestionColumna.Columns[6].Width = 180
clvGestionColumna.Columns[7].Text = "Pais(nac)"
clvGestionColumna.Columns[7].Width = 180

ConectarDB
END

PRIVATE SUB ConectarDB()
DIM strDatabase AS String
Conexion = NEW Connection

IF Dialog.OpenFile() THEN
   txaConexion.Text = " Database : Ningun database elejido del utente"
   txaConexion.BackColor = &HFF0000&
   txaConexion2.Text = " No conectado al database"
   txaConexion2.BackColor = &HFF0000&
   RETURN
ENDIF
Conexion.Name = Dialog.Path
Conexion.Type = "sqlite3"
Conexion.OPEN()
Resultado = Conexion.Exec("SELECT * FROM TDBDCaserma")
IF Resultado.Available = FALSE THEN
   txaConexion.Text = " Database :" & Dialog.Path
   txaConexion.BackColor = &HFF0000&
   txaConexion2.Text = " No conectado al database"
   txaConexion2.BackColor = &HFF0000&
   RETURN
ELSE
   txaConexion.Text = " Database :" & Dialog.Path
   txaConexion.BackColor = &H0080FF&
   txaConexion2.Text = " Conectado al database"
   txaConexion2.BackColor = &H00FF00&
   CargarColumnas()
END IF
Conexion.Close()
CATCH
 Message.Info(Error.Text)
 Conexion.Close()
END

in effetti,se l'errore fosse stato la dichiarazione della variabile Resultado AS Connection anzichè Result,cmq dovrebbe buggare indipendentemente che ci sia un record o nessuno nel database,o sbaglio..

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: connessione database
« Risposta #20 il: 03 Marzo 2008, 20:23:43 »
Se l'ultima era una domanda, allora posso dirti che dipende dal tipo di errore.
Nel tuo caso, il compilatore non poteva accorgersi dell'incompatibilità tra la variabile target e la funzione source, perchè in gambas non è ancora implementato un controllo di questo tipo; in runtime, il problema è che, nel tentativo di salvare la locazione di memoria di un tipo Result in un'altro tipo Connection, l'interprete si è trovato con un problema di conversione. In qualche modo ha tentato di creare il riferimento all'oggetto, ma poi nell'istruzione successiva, c'è il tentativo di accedere ad una proprietà della supposta classe; in questo caso l'interprete si accorto di fatto che i riferimenti erano proprio errati, e quindi ha emesso l'errore.
Problemi di questo tipo possono accadere normalmente, a volte a causa di una piccola svista, specialmente su applicazioni complesse; due modi per contenere queste sviste sono: includere il codice sospetto all'interno di una sequenza TRY...CATCH, oppure farsi due occhiaie così :fuso:  alla ricerca di eventuali errori, debuggando il codice fino all'esasperazione... :-)

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: connessione database
« Risposta #21 il: 03 Marzo 2008, 23:42:35 »
Prova a dichiarare la connessione all'interno della procedura che accederà al DB e non a livello di oggetti globali. E poi aggiungi la parola NEW perché la connessione va creata oltre che dichiarata per poterla usare.

Codice: [Seleziona]

PUBLIC SUB Accesso_DB()
DIM Conexion AS NEW Connection
DIM Resultado AS Result
(....)
Visita il mio sito personale: http://www.leonardomiliani.com

  • Visitatore
Re: connessione database
« Risposta #22 il: 04 Marzo 2008, 18:05:47 »
grazie md9327,ma forse non sono stato chiaro.era un problema di trascrizione.infatti come si vede del codice reale Resultado e dichiarato Result e non Connect.anche creando un database da terminale con sqlite3 me da lo stesso problema.adesso farò la prova di leo72.non dichiarerò Conexion come variabile publica di form di classe Connect ma come variabile locale in una sub.vi faccio sapere.

  • Visitatore
Re: connessione database
« Risposta #23 il: 04 Marzo 2008, 18:23:44 »
x leo72 e md9327
Codice: [Seleziona]

DIM Conexion AS NEW Connection
DIM Resultado AS Result
(....)

va come variabile locale invece di variabile globale. :good:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: connessione database
« Risposta #24 il: 06 Marzo 2008, 00:01:06 »
Non per contraddirti, sicuramente così funziona e certamente è il modo migliore nel tuo caso, ma il fatto che non funzionano come variabili pubbliche non dipende dal fatto che sono pubbliche. Probabilmente c'è qualche altra cosa che mi sfugge ma che interferisce nel loro funzionamento; attualmente utilizzo delle mie classi che hanno proprietà di questo tipo, pubbliche, e che funzionano regolarmente.

Comunque, meglio così, funziona ed è questo l'importante.

P.S.: prova a dichiararle private all'interno della classe, ad esempio:

PRIVATE $Conexion AS Connection
PRIVATE $Resultado AS Result

e usale compreso il carattere '$', e fammi sapere.


Ciao

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: connessione database
« Risposta #25 il: 06 Marzo 2008, 07:54:51 »
Ribadisco: secondo me il motivo per cui non andava al nostro amico era perché si scordava di utilizzare la parola chiave NEW: una connessione va inizializzata oltreché creata.
Penso che potrebbe funzionare anche come:
Codice: [Seleziona]

PUBLIC Connessione AS NEW Connection

(però non l'ho provato)
Visita il mio sito personale: http://www.leonardomiliani.com

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: connessione database
« Risposta #26 il: 06 Marzo 2008, 23:51:00 »
La variabile può essere anche solo definita:

"PUBLIC variabile AS TIPO"

quando la si vuole usare, si usa la parolina chiave NEW, altrimenti và subito in errore.
Questo è sicuramente vero con gli oggetti, ma in alcuni casi e linguaggi, i tipi più a basso livello di solito vengono inizializzati ad un valore di default, come ad esempio:

int = default 0;
char = default stringa vuota.

per gli oggetti, almeno in gambas, la variabile solo definita assume valore indefinito, in pratica è come se non esistesse. A questa può essere assegnato un valore nullo (=NULL), in questo caso la variabile assume un'entità reale ma, ad ogni modo non è ancora instanziata; con NEW viene effettivamente creato l'oggetto in memoria e diventa attivo a tutti gli effetti.

In nostro amico, a parte l'errore di assegnazione, aveva correttamente definito le variabili come proprietà dell'oggetto, impostandole all'inizio del file, e nel metodo poi ha creato effettivamente l'oggetto; la logica dice che deve funzionare così, e nei miei programmi è costruito tutto in quel modo e funziona. Nella discussione ho l'impressione che sia sfuggito qualcosa, come la svista di assegnazione, oppure nel segmento di codice manca qualche istruzione non riportata... non sò...

L'ora tarda mi annebbia la vista e la mente, e probabilmente non riesco a vedere esattamente qual'è il problema.

  • Visitatore
Re: connessione database
« Risposta #27 il: 07 Marzo 2008, 20:16:45 »
provare x imparare  :hammer:

Codice: [Seleziona]

PRIVATE $Conexion AS Connection
PRIVATE $Resultado AS Result


cmq il programma funge.solo per imparare un'altra cosa.