miondere
24-04-2004, 11:36
Non ho capito come nelle wxwindows si possa ottenere un risultato che proviene da più di una tabella di una database. La guida non è per niente chiara su questo punto.
Supponiamo di avere un database composto da due tabelle, che si chiamano Autori (3 attributi: Id, Nome, Cognome) e Playlist (2 attributi: Codice, Musica).
Se ad esempio creo un oggetto "table" scriverò nel seguente modo:
//qui sopra ci sarebbe tutta la parte di connessione al database a le inizializzazioni
const wxChar tableName[] = "Autori";
const UWORD numTableColumns = 3;
table = new wxDbTable(db, tableName, numTableColumns, "",
!wxDB_QUERY_ONLY, "");
table->SetColDefs(0, "Id", DB_DATA_TYPE_VARCHAR, Id_a,
SQL_C_CHAR, sizeof(Id_a), TRUE, TRUE);
table->SetColDefs(1, "Nome", DB_DATA_TYPE_VARCHAR, Nome_a,
SQL_C_CHAR, sizeof(Nome_a), TRUE, TRUE);
table->SetColDefs(2, "Cognome", DB_DATA_TYPE_VARCHAR, Cognome_a,
SQL_C_CHAR, sizeof(Cognome_a), TRUE, TRUE);
if (!table->Open())
{
wxMessageBox("Errore in apertura database","ERROR!",
wxOK | wxICON_EXCLAMATION);
}
wxString sqlStmt;
sqlStmt = "SELECT * FROM Autori, Playlist WHERE Codice=Nome";
table->QueryBySqlStmt(sqlStmt);
wxString msg;
while (table->GetNext())
{
msg.Printf("Riga %lu -- Nome : %s Cognome :%s",
table->GetRowNum(), Nome_a, Cognome_a);
wxMessageBox(msg, "Data", wxOK | wxICON_INFORMATION, NULL);
}
In questo caso funziona la select con il FROM che contiene anche "Playlist" e riesco a visualizzare i campi di "Autori" (Nome_a, Cognome_a) ma come faccio a visualizzare anche i campi di "Playlist"? Dove li leggo?
Il fatto è che "table" contiene solo i campi di "Autori", dovrei forse in qualche modo creare un'altro oggetto wxDbTable e fare una sorta di join con "table" e fare poi la SELECT...boh...
Spero in vostro aiuto.
Grazie mille.
Ciao.
Supponiamo di avere un database composto da due tabelle, che si chiamano Autori (3 attributi: Id, Nome, Cognome) e Playlist (2 attributi: Codice, Musica).
Se ad esempio creo un oggetto "table" scriverò nel seguente modo:
//qui sopra ci sarebbe tutta la parte di connessione al database a le inizializzazioni
const wxChar tableName[] = "Autori";
const UWORD numTableColumns = 3;
table = new wxDbTable(db, tableName, numTableColumns, "",
!wxDB_QUERY_ONLY, "");
table->SetColDefs(0, "Id", DB_DATA_TYPE_VARCHAR, Id_a,
SQL_C_CHAR, sizeof(Id_a), TRUE, TRUE);
table->SetColDefs(1, "Nome", DB_DATA_TYPE_VARCHAR, Nome_a,
SQL_C_CHAR, sizeof(Nome_a), TRUE, TRUE);
table->SetColDefs(2, "Cognome", DB_DATA_TYPE_VARCHAR, Cognome_a,
SQL_C_CHAR, sizeof(Cognome_a), TRUE, TRUE);
if (!table->Open())
{
wxMessageBox("Errore in apertura database","ERROR!",
wxOK | wxICON_EXCLAMATION);
}
wxString sqlStmt;
sqlStmt = "SELECT * FROM Autori, Playlist WHERE Codice=Nome";
table->QueryBySqlStmt(sqlStmt);
wxString msg;
while (table->GetNext())
{
msg.Printf("Riga %lu -- Nome : %s Cognome :%s",
table->GetRowNum(), Nome_a, Cognome_a);
wxMessageBox(msg, "Data", wxOK | wxICON_INFORMATION, NULL);
}
In questo caso funziona la select con il FROM che contiene anche "Playlist" e riesco a visualizzare i campi di "Autori" (Nome_a, Cognome_a) ma come faccio a visualizzare anche i campi di "Playlist"? Dove li leggo?
Il fatto è che "table" contiene solo i campi di "Autori", dovrei forse in qualche modo creare un'altro oggetto wxDbTable e fare una sorta di join con "table" e fare poi la SELECT...boh...
Spero in vostro aiuto.
Grazie mille.
Ciao.