Ich habe ein problem mit der Verbindung von meinem PC zu einer Datenbank.
Ich habe alle treiber usw installiert und auch in meiner ENtwicklungsumgebung angestellt.
Joa, dann habe ich mir den Beispielcode, der bei dem Tutorial das ich verwende dabei war, genommen und angepasst. Daten stimmen alle usw. Die Verbindung per Treiber hab ich auch eingestellt, ich hab aber nichts mit MSAccses gemacht, aber da stand das man das nicht brauch, stimmt das?
Nunja, jedenfalls sagt es bei dem beispielcode das ein Objekt oder eine Objektvariable fehlt.
Hier mein COde, hoffe drauf das mir jemand weiterhelfen kann!
(Geh richtig das FormLoad soll, ich willd as bei dem Start der Exe die Verbindung aufgebaut wird, also sollte das timmen, oder? )
Hast du den MySQL ODBC Treiber installiert?
Welche Fehlermeldung erhälst du genau?
Tip: Ändere in deinem Post im Code das PW und danach auch nochmals auf dem DB Server selbst.
Ist nicht so optimal, das hier so einfach preiszugeben...
Und an welcher Stelle bringt er das?
Beim oConn.Open ?
Eigentlich sieht der Code richtig aus.. werd ihn gleich mal probieren und dann hier editieren.
EDIT:
Ha.. ganz einfach eigentlich.
Du musst erst mal natürlich "oConn" als Objekt für eine (ADO)DB-Connection deklarieren.
Sonst weiß der Compiler damit nichts anzufangen.. (und die Funktion "open" kann dann natürlich auch net verwendet werden)
Dim oConn As New ADODB.Connection
BTW.:
Für die Abfragen musst du auch eigene Objekte deklarieren, die dann die Results zurückbekommen, die du bei einer Abfrage über oConn.execute erhälst (z.B. oConn.execute("Select * from Irgendwastable where Name='BeyondTheTruth'")
Da brauchst du ein "Recordset-Objekt"
(deklarieren z.B. mit
Dim oRS As New ADODB.Recordset
)
In Verwendung könnte das dann so aussehen:
oRS=oConn.execute("Select * from Irgendwastable where Name='BeyondTheTruth'")
So ein Recordset-Objekt enthät dann immer die Ergebnisse der Abfrage, die sich einfach über den Namen der jeweiligen Spalte ausgeben lassen. Hat dein Table also 5 Spalten (z.B. Name, Adresse, Telefonnummer, Mailadresse, PersonalID) und du fragst alle Spalten in deinem Selectbefehl ab, dann kannst du sie so ausgeben:
Erwartest du, dass bei deiner Abfrage mehr als eine Zeile zurückgegeben wird, kannst du dich im Recordset mit folgenden Funktionen jeweils eine Zeile hoch, bzw. runter begeben:
oRS.MovePrevious
oRS.MoveNext
zur ersten, bzw. zur letzten Zeile würdest du mit folgenden Funktionen kommen:
oRS.MoveFirst
oRS.MoveLast
Letzter Tip (es sei denn, du fragst noch nach was *g*):
Mit folgender Schleife kannst du alle Reihen eines Resultsets durchgehen (und innerhalb der Schleife dann z.B. immer jeweils bestimmte Reihen einer Zeile ausgeben, oder auf irgendwas überprüfen... wie auch immer):
Do Until oRS.EOF
[WAS GETAN WERDEN SOLL.. z.B. AUSGEBEN DER EINZELNEN ELEMENTE...]
Loop
Geändert von BeyondTheTruth (24.10.2005 um 10:57 Uhr)
Wenn du so arbeitest, wie oeben im Code angegeben, brauchst du keine fixe Verbindung..
Im Prinzip baust du zur Laufzeit das auf, was du sonst in den ODBC Settings als Verbindung speicherst... (indem du beim oConn.open den "Driver", den "Server", die "Database", sowie "Username" und "Password" angibst.)
Alternativ kannst du auch eine fixe Verbindung über die System-ODBC Settings einrichten und die im Code verwenden Der Aufruf würde dann lauten
oConn.open("DSN=Verbinungsname")
bzw. in deinem Code, weil du den Verbindungsstring ja vorher in einer Variable speicherst:
Statt Verbindungsname musst du den Namen eintragen, den du der Verbindung in den ODBC Settings gegeben hast (aus dem vorigen Post entnehme ich mal, dass sie "verbindung1" heißt).
Theoretisch müsste es aber eben auch auf die Art funktionieren, wie dus jetzt hast...
Aber bevor wir uns da lange Gedanken machen, probiers zuerst mal es über die vorgefertigte Verbindung.
Also einfach
Jetz hat meine Firewall schon ageschlagen und gesagt: VisualBasic versucht auf das Internet zuzugreifen. Habe ich bestätigt und dann kam Laufzeitfehler:
[
EInfach nur eine [
Nunja, wenigstens ist schonmal eine Verbindung zum Internet da
Ich überprüfe mal ob da irgendwelche einstellung oder Parameter sind die in dem Script von eben nicht drinne sind...
edit: Huhu!
Ich habs hingekreigt das der fehler draußen ist! Aber trotzdem möchte ich jetz das dieser ganze Kram da in meiner Exe Datei steht, und ich net bei anderen das einstellen muss, vorallem weil sie das dann acuh auslesen könen!
Jetz hat meine Firewall schon ageschlagen und gesagt: VisualBasic versucht auf das Internet zuzugreifen. Habe ich bestätigt und dann kam Laufzeitfehler:
[
EInfach nur eine [
Nunja, wenigstens ist schonmal eine Verbindung zum Internet da
Ich überprüfe mal ob da irgendwelche einstellung oder Parameter sind die in dem Script von eben nicht drinne sind...
...
o_O ...
Sachen gibts *g*
Zitat
edit: Huhu!
Ich habs hingekreigt das der fehler draußen ist! Aber trotzdem möchte ich jetz das dieser ganze Kram da in meiner Exe Datei steht, und ich net bei anderen das einstellen muss, vorallem weil sie das dann acuh auslesen könen!
...
Fein!
Auslesen können sie gar nix, da das PW bei der Speicherung der ODBC Settings NICHT mitgesichert wird..
Das Eingeben vom PW dient lediglich um am Ende den Verbindungstest zu machen.
Das PW, das dann bei der Verbindung verwendet wird, gibst du ja im Code an..
von daher brauchst du diralso keine Sorgen zu machen.
Das Einrichten der Verbindung braucht der User nicht selbst zu machen, sondern kann ganz einfach über einen Batch gemacht werden. Zumal ohnehin der ODBC-Treiber erst installiert werden muss - also wirst du wahrscheinlich net drum-rum kommen eine Setup Routine zu kreieren. Besagter Batch kann da dann also auch noch ganz einfach eingebaut werden.
Bei Interesse, helf ich gern weiter.
Willst dus dennoch ohne fest im System gespeicherte ODBC Verbindung machen - also nach der Methode wies Anfangs war - heißts wohl erneut auf Fehlersuche gehen...
Kopier bitte den ganzen Code, wie du ihn jetzt hast (in der Form ohne das "DSN=verbindung" eben) nochmal rein..
Mal sehen ob ich den gleichen Fehler krieg.
Aber wie gesagt: Dass der User den ODBC Treiber für MySQL installieren muss, wirst du so oder so nicht verhindern können... D.h. wirst du, wie ebenfalls schon erwähnt, ein kleines Setupprogramm hinzufügen müssen (wenn das ganze wirklich einfach und schnell portable sein soll).
Private Sub Form_Load()
MsgBox "Willkommen bei Wakeup Maike, dem etwas anderen Chatsystem "
' Connection-String festlegen
Dim oConn As New ADODB.Connection
Dim sConn As String
Dim sServer As String
Dim sUserName As String
Dim sPassword As String
Dim sDBName As String
' Server Hostname (oder IP)
sServer = "mysql.lima-city.de"
' Benutzerdaten
sUserName = "USER26252"
sPassword = "*******"
' Datenbank-Name
sDBName = "DB1116949315"
sConn = "Provider=MSDASQLriver=MySQL;" & _"Server=" & sServer & "atabase=" & sDBName
' Connection öffnen
oConn.Open sConn, sUserName, sPassword
End Sub
Private Sub inp1_Change()
lbl4.Caption = inp1.Text
End Sub
Private Sub but1_Click()
MsgBox "Diese Anwendung ist momentan leider nicht verfügbar!"
End Sub
Nun...wie schreibt man denn einen Setup?^^" Aber da kann man ja im Notfall auch diese SetupManager nehmen, soweit ich weiß. So wie es da steht kommt die fehlermeldung mit der Datenquelle die nciht gefunden wird und das kein Standarttreiber zur verfügung steht...
edit: ich hättes mir zwar nicht zugetraut, aber ich habs hingekriegt
Ich musste nur bei sConn einen Eintrag mehr machen der den Treiber angibt!
Private Sub Form_Load()
MsgBox "Willkommen bei Wakeup Maike, dem etwas anderen Chatsystem "
' Connection-String festlegen
Dim oConn As New ADODB.Connection
Dim sConn As String
Dim sServer As String
Dim sUserName As String
Dim sPassword As String
Dim sDBName As String
' Server Hostname (oder IP)
sServer = "mysql.lima-city.de"
' Benutzerdaten
sUserName = "USER26252"
sPassword = "*******"
' Datenbank-Name
sDBName = "DB1116949315"
sConn = "Provider=MSDASQL;Driver=MySQL;" & _"Server=" & sServer & "atabase=" & sDBName
' Connection öffnen
[...]
Ich musste nur bei sConn einen Eintrag mehr machen der den Treiber angibt!
Seltsam - Ich hab im Hinterkopf, dass Driver=MySQL eigentlich immer gereicht hat...
Kanns zwar hier nicht ausprobieren, weil ich hier keine MySQL DB und Treiber hab (nur MSSQL) - aber werd das heute Abend Zuhause nochmal machen.
Hätte schwören können, das funzt auch wie am Anfang angegeben.
Na however - zumindest scheinen ja jetzt alle Probleme aus der Welt geschafft zu sein.
Was bastelst du da eigentlich? ^^
Es wird so ne Art Messenger, okay, MySQL wird da nicht die beste Lösung sein, aber es ist perfekt für meine Zwecke, weils halt nicht NUR ein Messenger werden soll. Das Ding kann zwar Nachrichten übermitteln (Oder mehr soll es mal können^^") aber auch diverse andere Zwecke erfüllen:
-Wie der Name Wkeup Maike schon sagt, soll es mal eine Art aufweck Programm werden, hab ne Freundin die schläft manchmal fast ein oder so, da is sowas ganz nützlich
-Dann eben noch die Messenger Funktion
-Dann die Möglichkeit es meinen Wünschen anzupassen
-Privates Chatsystem
Wie gesgat, nciht die beste Lösung, aber einfacher als all die andren die ich mal so gesehen hab
Hey. Messenger klingt gut. Hab ich auch mal gemacht in VB. Is schon länger her. Müßte mir mal sen Source raussuchen und vielleicht sogar mal erweitern...
Wäre eigentlich dochmal ne Idee um das Programmierforum wieder in Gang zu bringten: Ein IM für die Kingdom-Community als neues Projekt...
Mit dem man z.B. auch Überblick über die aktuellsten Themen, bzw. die z.Zt. "heißesten" Themen (mit vielen Posts) hat - sowie sehen kann, wer grade im Ring ist in die Profile der einzelnen User kann. PMs an alle schicken kann, die nicht im IM-Netzwerk des Kingdoms sind schnell einen Überblick über den eigenen PN-Posteingang hat, und und und...
Wär doch auch mal ein nettes Projekt, finde ich.
Aber wer weiß ob sich außer uns beiden hier überhaupt noch wer im Thread einfindet.. ^^.
Na egal - BTT (in diesem Falle nicht "BeyondTheTruth"):
Also generell fällt mir bei deiner Befehlszeile mal auf, dass du fix den String "inp1.Text" einfügst - und ich denke mal, dass das nicht beabsichtigt ist.
Was du wohl eher willst ist ein:
ergebnis = oConn.Execute("INSERT INTO wake (message) VALUES ('" & inp1.Text &"')")
Wenn dir der Unterschied, bzw. der Grund warum das so gehört nicht ganz klar ist - einfach nochmal nachfragen.
Schätze aber mal, dass du's verstehen wirst .
ALLERDINGS sollte auch der vorherige Aufruf keinen Fehler bringen (habs zwar jetzt nicht getestet, aber sieht eigentlich richtig aus...)
Solltest du also tatsächlich eine Fehlermeldung kriegen, dann poste sie mal bitte.
Allllso, ich habe jetzt in einem anderen FOrum nochmal hilfe bekommen, und von google... *ist das stundenlange googeln langsam leid*
Die haben mir gesagt das die mSQL Verbindung nur in dem Sub aktiv ist in dme sie gemacht wurde. Okay, ich verschiebe also die Vberbindung in das
Sub but1.Click
Alles cool, dann mache ich noch den eintrag richtig wie du es geschreiben hast (ist mi gar nicht aufgefallen )
Wenn ich es jetzt per Exe aufrufe, also vorher Comilier stürtzt die Exe Datei ab, wenn ich es nicht compilier und per Entwicklungsumgebung starte stürtzt die gleich mit ab! Und keinen eintrag *frustriert*
PS: Bei dem projekt wäre ich gleich dabei, aber dafür bräuchte man das Passwort, den Host usw von RPG-Kingdom, und ich glaube irgendwie nicht das der/die liebe Admin das rausgibt... hab gerade vergessen obs ne Frau oder nen Mann ist...
Nunja, ich poste als Anhang nochmal meinen aktuellen Code.
PS: Das Merkwürdige ist (Ich habe mit Soppmarken getestet) das das programm erst bei dem End Sub des but1 abstürtzt! Muss dort vielleicht noch eine befehlszeile hin? Ich hatte mal gelsen das die Variable die zum eintragen genommen wird wieder freigemacht werden mus, vielleicht ist das ja der Fehler..*nochmal googlet*
Wäre eigentlich dochmal ne Idee um das Programmierforum wieder in Gang zu bringten: Ein IM für die Kingdom-Community als neues Projekt...
Mit dem man z.B. auch Überblick über die aktuellsten Themen, bzw. die z.Zt. "heißesten" Themen (mit vielen Posts) hat - sowie sehen kann, wer grade im Ring ist in die Profile der einzelnen User kann. PMs an alle schicken kann, die nicht im IM-Netzwerk des Kingdoms sind schnell einen Überblick über den eigenen PN-Posteingang hat, und und und...
Wär doch auch mal ein nettes Projekt, finde ich.
...
Und wie willst du das realisieren? Afaik hat das vB für sowas keine API.
Und falls du's wirklich machst, bitte portabel und nicht in VB.
Und wie willst du das realisieren? Afaik hat das vB für sowas keine API.
Und falls du's wirklich machst, bitte portabel und nicht in VB.
...
Hab ich gesagt, dass ich das mache? o_O (Warum immer jede kleine Idee die man mal so vor sich hinprabbelt, bzw. hinschreibt als "JA! DAS MACH ICH JETZT"" aufgefasst wird *g* ..)
Zumal viele Wege nach Rom führen - speziell wenn es um "anzapfen", bzw. "korrespondieren" mit Webseiten geht.
Man benötigt da nicht wirklich Zugriff auf die Datenbanken.. alle Daten, die benötigt werden lassen sich übers Web aufrufen...
Da gäbe es einerseits den Ansatz z.B. Microsofts IE-Control einzubauen (ja.. das wird jetzt gleich wieder verpöhnt) und die Daten im IM-Client selbst dann entsprechend zu bearbeiten, bzw. auszuwerten oder andererseits alles über eine weitere Zwischenstation (also einen eigenen Server) "absuagen und parsen zu lassen", um an den Client dann nur noch den fertigen Datenstrom zu übergeben - dann könte jeder nach einer Spezifikation wie die Anfragen an den Server auszusehen haben und die Antworten kommen, seinen eigenen Client schreiben und das Ganze könnte auch für mehere OS, bzw. gleich als protable Anwendung gelöst werden...
Allerdings sehe ich hierbei ein kleines Problem, wenns ums handling von PNs geht. Dazu müsste nämlich immer UserName und Passwort an den Server übertragen werden...
Zitat von raian
PS: Bei dem projekt wäre ich gleich dabei, aber dafür bräuchte man das Passwort, den Host usw von RPG-Kingdom, und ich glaube irgendwie nicht das der/die liebe Admin das rausgibt... hab gerade vergessen obs ne Frau oder nen Mann ist...
...
Seit Neuestem beides..
aber nicht im Einem ^^"
Zitat von raian
Die haben mir gesagt das die mSQL Verbindung nur in dem Sub aktiv ist in dme sie gemacht wurde. Okay, ich verschiebe also die Vberbindung in das
...
Hm.. ja.. kann sein.. ^^.
Werd deinen CODE gleich mal ausprobieren (soweit das geht, ohne die richtige DB Struktur)
EDIT: Seh grade.. das wird wohl net wirklich viel bringen. Na denn.. mal DB und Tabelle anlegen..
Was schreibt das Ding denn beim Absturz?
Übrigens kanns nicht schaden, wenn du am Ende (bzw. beim Unload Event deines Hauptforms, über
Private Sub Form_Unload(Cancel As Integer) -) ein oConn.close machst, um die Verbindung selbst zu schließen.
Nochwas fällt mir grad auf: Du führst das SQL Statement zwar aus, hast es aber im aktuell geposteten Code deinem deklariertem RecordSet Objekt nicht zugeordnet.. (bzw. so wie es scheint auch gar nicht mehr deklariert!?)
EDIT2:
So.. Code grad kopiert und das entsprechende Form mit Button und Input gebastelt und wollte grade die Tabelle erstellen, da fiel mir auf, dass du in deinem aktuellen INPUT Statement nen Syntaxfehler hast.
Müßte ja eigentlich heißen
Du brauchst beim INSERT ja zunächst die Tabelle und dann in Klammer die Felder in die du einfügen willst. (du hattest in der letzten Codeversion nur noch "INSERT INTO (wake) Values" ...!?)
EDIT3:
So funzt es bei mir mit MSSQL und einer Tabelle wake mit der Spalte "message":
So.. hab dir eh ganz deutlich gekennzeichnet wo du wieder umschreiben musst, bzw. ich was gemacht habe.
(und ich war mir net sicher ob das "verschlüsseln" des PWs für den SQL Zugriff Programmintern notwendig ist... deshalb hab ich die zwei Zeilen mal auskommentiert (hab die dafür nötige Routine auch gar net mitkopiert)
Geändert von BeyondTheTruth (27.10.2005 um 14:14 Uhr)
Das verschlüsseln des Passwortes ist nicht ötig, aber bei mir stand mal das passwort im Quellcode,, auch nach dem Compilieren, und dem habe ich so abgetan (welche gewählte ausdrucksweise xD)
Werde deinen code jetzt mal testen, danke im Voraus!
edit:
Hmm.. merkwürdig...schießt mir immernoch alles ab... o.O
Jo.. dann ist das mit der Verschlüsslung auch verständlich.
HM.. die IDE stürzt einfach ab?
Not so good... in dem Fall: kompilieren und ausführen.. dann solltest du auf jeden Fall ne Meldung kriegen..
(und poste den Code wie er nun bei dir aussieht..)