09. oktober 2003 - 17:42Der er
13 kommentarer og 1 løsning
Hjælp til mySQL?
Hej.
Jeg har hentet mysql++ lib'et og ved godt der følger nogle eksempler med, men jeg kan ikke lige få det til at virke.
Så kan nogen vise mig et helt stykke kode som kan compiles med VC++ 6.0 og som viser hvordan jeg indsætter, sletter, og redigerer tables og indhold i min database? Vis også hvordan jeg connecter osv. altså det skal være noget kode som virker udfra det jeg har udskiftet database name, password osv. med.
Du skal: - fortælle compileren at den skal lede efter include filer i \mysql\include - du skal linke mod \mysql\lib\opt\libmysql.lib - når programmet køres skal \mysql\lib\opt\libmysql.dll være i path
if(!mysql_query(mysql_handle, "SELECT id,data FROM user")){ cout << "Fejl: " << mysql_error(mysql_handle); exit(1); }else{ // Ingen fejl fundet - viser data MYSQL_ROW row; unsigned int num_fields; unsigned int i;
result = mysql_store_result(mysql_handle); num_fields = mysql_num_fields(result); while((row = mysql_fetch_row(result))){ unsigned long *lengths; lengths = mysql_fetch_lengths(result); for(i = 0; i < num_fields; i++){ cout << lengths[i] << row[i] << row[i]; }
Lige et indskudt spørgsmål til denne tråd: Er det uhensigtsmæssigt at benyttes MFC's CRecordset og få tilgang til db'en via en ODBC driver?? Tilsynesladende understøtter MySQLs ODBC driver kun snapshot og ikke dynaset, men jeg ved ikke hvor stort et problem det bliver i længden (newbie i SQL databaser). Bemærk venligst, at basen ikke skal benyttes kommercielt men kun til en form for test af prototype - ikke desto mindre kunne jeg da godt tænke mig at vide Jeres holdning til MFCs CRecordset og ODBC drivere fremfor andre fremgangsmetoder såsom ovenstående API library...
..og lige den (forhåbenligt0) sidste: Er det hensigtsmæssigt at oprette og nedlægge CRecordset nedarvninger (i snapshot mode) flere gange i et program eller er det meningen de skal oprettes een gang i "master" constructoren og nedlægges i "master" destructoren?? Jeg har læst at når der benyttes snapshot, at tabellen som CRecordset objektet binder sig til, kopieres til hukommelsen (snapshot), men det giver vel ingen mening at oprette samtlige tabeller og allokere dem i hukommelesen eller hvad ???! Jeg har ikke kunnet finde noget om "best practices" vedr. MFCs CRecordset, så jeg er temmeligt meget i tvivl om hvad der er den bedste metode.
Som lovet så bringer jeg feedback på mit eget spørgsmål - se ovenstående.. MFCs recordset virker formidabelt og uden de store problemer, hastigheden er i top og det virker uden de stor krumspring. En tjekliste for at komme op at køre..
1) Få fat i adgangsinfo til Database og dennes ip 2) Installer ODBC driver som kan køre med databasen og sæt en data source profil op 3) Lav dit MFC projekt 4) Lav et object som nedarver fra CRecordset - Du vil blive promptet for hvilken tabel og hvilken data source du ønsker at benytte. Vælg kun een tabel, dvs. der skal oprettes lige så mange objekter som der er tabeller. 5) Opret en generel forbindelse i hovedlaget som håndtere database-tilgang med (xxx = Data source name)
Edit : ODBCTable1 tab1(&m_dbDatabase); // Dette filter sættes ind efter SQL kommandoen WHERE tab.m_strFilter = "PrimKey = '" + key.ToString() + "'"; tab.Open(CRecordset::snapshot); tab.Edit(); tab.m_Field1 = .. tab.m_Field2 = .. tab.Update();
7) Alle funktioner kaster exception hvis problemer som bare kan gribes med en try/catch - giver udemærkede fejlbeskeder..
8) A word of caution to this tale: Hvis der benyttes DATETIME i SQL (CTime i MFC) så husk at initialisere CTime i constructoren på CRecordsæt nedarvningen ellers crasher systemet.. Husk ikke at benytte keywords som feltnavne så som Index og Key
Det var så de erfaringer jeg har høstet indtil videre - håber der er nogen som engang vil få brug for det ;-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.