MFC und datenbank (MySQL)
-
was soll es noch mehr können? Du kannst einiges zur Datenbank erfahren. Das musst du aber selbst rausfinden. Steht eigentlich auch auf meiner Webseite.
-
Also ich hab jetzt mal ohne viel nachzudenken einfach das aus obigem Link versucht, ich komm da aber auf keinen grünen Zweig!
Ich kann nicht mal mehr debuggen, der springt mir immer in den Assemblercode auf irgendeinen User Breakpoint.
Kannst du mir mal sagen wie man einfach nur connected?
Bei mir hängt sich dann das ganze Programm auf, woran liegt das?
Hier mal mein Source bei dem das komplette Programm sich aufhängt!if (m_databaseconnect.connected == false) { switch (m_databaseconnect.connect(m_dbhost,m_dbdatenbank,1433,m_dbuser,m_dbpassw))// <-- hier hatte ich "text" drin, statt den Variablen { case DB_CONNECTION_BAD: MessageBox("Bad connection"); return false; break; case DB_CONNECTION_OK: MessageBox("connection IO"); break; } }
Er springt glaub ich schon in die if denn einmal bekam ich Bad connection aber seit dem hängt es sich jedes mal wieder auf!
-
ist eigentlich alles richtig
welche VC-Version verwendest du?
-
VC6 hab jetzt noch ein wenig probiert und festgestellt, dass er nach ca 5 min dann doch ein Fenster bringt bad connection, das würde ja eigentlich darauf hin deuten, dass die Übergabe-Parameter vom connect falsch sind, oder?
Kann ich schreibenm_databaseconnect.connect("meinHost","meineDB",1433,"anyusr","anyusr")//??
sprich darf ich da einfach so nen String übergeben? eigentlich spricht doch da nichts dagegen, oder?? Aber selbst wenn die falsch sind dürfte er sich doch eigentlich nicht so aufhängen, oder? also ich habe sonst ganz normal über den Wizzard die DSN zu der DB ausgewählt und wenn ich da connected hab ging das razfaz
-
ja kann man
-
Ok ich hab jetzt jegliche möglichkeit versucht um irgendwie zu connecten, es scheiterte aber jedes mal!
1. muss ich den Server mit \\ angeben?? \\RAEDV10 oder nur RAEDV10
2. bei DatabaseName den Namen angeben, oder den Namen der DSN (wenn ich das richtig verstanden habe bräuchte ich gar keine)
3. Ich hab den Port aus der DSN gelesen, mit der es geht, dann sollte der doch richtig sein, oder?
4. muss ich noch irgendwas vor diesem Source machen?if (m_databaseconnect.connected == false) { switch (m_databaseconnect.connect("RAEDV10","4862TRW",1433,"anyusr","anyusr")) { case DB_CONNECTION_BAD: MessageBox("connection NIO"); return false; break; case DB_CONNECTION_OK: MessageBox("connection IO"); break; } }
-
1. richtig nur den Namen vom dem Datenbankserver oder die IPAdresse angeben.
2. Ja den Namen der Datenbank angeben.
3. Das ist der Port für Microsoft SQL Server.
4. nein das sollte so passen.Kann es vielleicht sein das Dein Datenbankserver eine Firewall benutzt?
-
Kann es sein das Du garnicht MySQL benutzt.
5 Min für eine abgelehnte Verbindung ist etwas lange. Normalerweise dauert dies bei falschen eingaben Wenige Millisekunden.
Und wie skorpions77 sagte: Dies ist nicht der Standardport von MySQL. MySQL hat 3306.
-
@scorions77 ICh glaube nicht dass der Server ne Firewall hat, da ich ja mit dem was der Wizard erstellt hat und über die ODBC schnittstelle ja auf die Daten komme!
@Unix Tom Die lange Zeit könnte natürlich auch an der größe der DB liegen, allein in der Tabelle die ich benutze sind 152 Splaten und momentan knapp 6500 Datensätze. Aber so wie ich das auf deiner HP gelesen habe kann deine DLL das!
Zu dem Thema mySQL, ich dachte bis vor 10 Sekunden noch dass auf dem Server MySQL läuft, hab aber soeben nach 10 verschiedenen Antworten endlich herausgefunden, dass es MS-SQL ist!
Tut mir leid, dass ich euch damit belästigt hab, war nicht meine Absicht. Danke dennoch für eure Hilfe
-
Es gibt auch eine ODBC-Wrapper
www.sensorme.de/dateien/odbc.zip
Unterscheidet sich lediglich in der Connectfunktion und ist pro Feld auf 255 Zeichen begrenzt.
Bei einem Connect ist es egal wie groß die DB ist.
Hier wird lediglich die User-Tabelle abgefragt die eigentlich bei 100000 Einträge sicher nicht länger als wenige s brauchen darf.
-
cool werde ich gleich mal probieren, gibt es aber eine Möglichkeit die Feldgröße zu ändern? also bisher hab ich mir halt einfach meinen Stringauf String(2000) gemacht. denn ich muss in einem Feld EEPROM-Daten auslesen.Und die sind gern mal knapp2000 Zeichen lang
-
also ich hab dasd jetzt mal gezogen, was du da oben verlinkt hast, und hab es eingebunden. Wenn ich es jetzt ausführen will sagt ein immer cannot find databaselibodbcD.lib ist natürlich ein Fatal Linker Error. ich hab mal nachgeschaut und in dem was du mir geschickt hast gibt es nur databaselibodbc.lib aber laut der Header braucht mal databaselibodbc.lib und databaselibodbcD.lib mach ich was falsch oder fehlt da ne Datei?
Die Instanz auf die Klasse und dann ein einfaches connect ist jetzt so, oder?CODBCDatabase m_databaseconnect; if (m_databaseconnect.connected == false) { switch (m_databaseconnect.connect("ACR")) { case DB_CONNECTION_BAD: return false; break; case DB_CONNECTION_OK: break; } }
-
Ist ein Fehler im Header.
Du kannst im Header beide auf
databaselibodbc.libsetzen.
Wenn du eine Debug hast dann wird auch die
databaselibodbc.lib genommen.
Da es nicht OS ist wäre ich ja doof die DebugLib mitzugeben.Die Begrenzung der max. Spaltenlänge läßt sich abstellen. Ist aber nicht so einfach da VC++ 6 bzw. Net auch was kostet und für provate Entwickler sollte 255 Zeichen pro Spalte ausreichen.
-
Ich habe jetzt die DebugLib raus genommen, und stoße dann gleich auf das nächste Problem,
unresolved external symbol "__declspec(dllimport) public: int __thiscall CODBCDatabase::connect(class CString)" (__imp_?connect@CODBCDatabase@@QAEHVCString@@@Z)
was mach ich denn nu schon wieder falsch?
Zu dem mit den 255 Zeichen, ist das in deiner Lib begrenzt? Oder nur durch meine Zuweisung an einen String, denn ich hab EEPROM Date, die ich in einem nicht kommerziellen Programm auslese, und die passen bei mir nicht in 255 Zeichen. Sonst hatte ich halt einfach CString test(2000); geschrieben, und schon hatte ich 2000 Zeichen frei!
-
du musst die lib dazulinken
Was soll CString test(2000); bringen.
Abgesehen davon das die Klasse CString einen String erwartet und ein INT einen Fehler verursacht.
Die 255 Zeichen sind im Code begrenzt. Es werden nicht mehr ausgelesen.
Ein Programm in einer Firma zu verwenden ist für mich kommerziell.
Mit Nicht kommerziell meine ich private Projekte.
-
OK vergessen wir das ganze, ich greif ganz normal ohne deine DLL drauf zu und gut, ich dachte nur dass du dein Wissen in eine DLL packst und verbreitest, dass man sie auch verwenden kann. Wenn ich mir ein Programm für mich schreibe, und damit nun mal in ner Firma bin ist das nicht wirklich kommerziell genutzt! Ich will für mich ein kleines Programm um schnell mal Daten aus nem Server zu ziehen. Naja kann ich wohl nichts machen wenn du mir nicht helfen willst. Am besten lösch ich die Files auch gleich nicht dass das nachher noch ein kommerzieller Download oder etwas ähnliches war!
P.S.: Ich habe alle Libs die mir zur Verfügung stehen gelinkt! Aber das spielt jetzt auch keine Rolle mehr
-
Brauchst nicht zickig werden.
Ich habe mal die UNLIMITED hochgeladen.
Ist für VC++ 6
-
WOW vielen Dank! Hätte ich nach deinem letzten Post ehrlich nicht gedacht, desto mehr freut es mich jetzt diesen Post zu lesen. Vielen herzlichen Dank! Find ich echt klasse, und wie sieht es jetzt aus wenn ich mir ein Programm schreibe, das mir in meinem gewünschten Stil SQL Daten anzeigt? Ich nutze es in einem Betrieb; zwecks kommerzieller Nutzung? Darf ich oder nicht?
Vielen Dank für deine Mühe.