Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Frage Entwicklung VB for Applications

Bekomme das Ergebnis 2x mehr als das es in der DB steht(MySQL)

Mitglied: PL-q

PL-q (Level 1) - Jetzt verbinden

04.09.2008, aktualisiert 12.09.2008, 3186 Aufrufe, 7 Kommentare

Hallo Leute,
ich habe grad was das Thema MySQL betrifft angefangen und bin totaler Anfänger in diesem Gebiet.
Wenn ich eine Anfrage durchführe, funktioniert alle Perfect, doch wenn ich mehrere Anfragen hintereinander ausführe, dann bekomm ich das ergebnis aber 2x!

Hier mal ein Code der funkt(Habe 2 Einträge in der DB, habe vorher natürlich die Notwendigen Sachen erledigt!):
01.
Sub test1() 
02.
Server_id = 4 
03.
Dim sSQL As String 
04.
sSQL = "SELECT Server_ID FROM channels" 
05.
Set oRs = oConn.Execute(sSQL) 
06.
While Not oRs.EOF 
07.
      DoEvents 
08.
       ServerID = oRs.Fields(0).Value 
09.
If ServerID = Server_id Then 
10.
MsgBox "yes" 
11.
Else 
12.
MsgBox "no" 
13.
End If 
14.
oRs.MoveNext 
15.
Wend 
16.
If Not oRs Is Nothing Then oRs.CloseRecordset 
17.
Set oRs = Nothing 
18.
End Sub
Dann kommt 2x yes, was auch stimmt!
Versuch Nr. 2:
01.
Sub test1() 
02.
Server_id = 4 
03.
Dim sSQL As String 
04.
sSQL = "SELECT Server_ID FROM channels" 
05.
Set oRs = oConn.Execute(sSQL) 
06.
While Not oRs.EOF 
07.
      DoEvents 
08.
       ServerID = oRs.Fields(0).Value 
09.
channelnumb 
10.
oRs.MoveNext 
11.
Wend 
12.
If Not oRs Is Nothing Then oRs.CloseRecordset 
13.
Set oRs = Nothing 
14.
End Sub 
15.
 
16.
Sub channelname() 
17.
Dim tSQL As String 
18.
tSQL = "SELECT Channel_Name FROM channels WHERE Server_ID LIKE " & ServerID 
19.
Set oRt = oConn.Execute(tSQL) 
20.
While Not oRt.EOF 
21.
channel_name = oRt.Fields(0).Value 
22.
If ServerID = Server_id Then 
23.
MsgBox "yes" 
24.
Else 
25.
MsgBox "no" 
26.
End If 
27.
oRt.MoveNext 
28.
Wend 
29.
If Not oRt Is Nothing Then oRt.CloseRecordset 
30.
Set oRt = Nothing 
31.
End Sub
dann kommt 4x yes anstatt 2x! Das ist aber falsch, da ich nur 2 Einträge habe und ich muss mehrere Anfragen hintereinander machen.
Das muss wie ein Baumsystem verlaufen(heißt Tree o. so xD) Laufen

--Func1
[---Func2
[---Func3
und dann wider alles von vorne =)

Ich hoffe ihr könnt mir weiterhelfen =)

mfg
PL-q

[Edit Biber] Code-Tags ergänzt zur Lesbarkeit. [/Code]
Mitglied: AndreasHoster
05.09.2008 um 09:57 Uhr
Bei dem Code ist nicht fehlende MySQL Kenntnis das Problem, sondern Programmierkenntnis insgesamt.
Server_ID und Serverid ist in der sub channelname nicht definiert, daher macht Zeile 22 keinen Sinn und deswegen klappt wohl auch das Yes/No nicht.
Eine Variable, die in einer Sub definiert ist, ist nur in dieser Sub definiert, nicht in weiteren Subs.
Daher übergibt man Parameter an weitere Sub Routinen auch explizit.
In VBA wäre das so:
Zeile 9: channelname ServerID, Server_ID
Zeile 16: sub channelname(ServerID, Server_ID)
Bitte warten ..
Mitglied: PL-q
05.09.2008 um 13:46 Uhr
Das Yes/No funktioniert und habe ServerID u. Server_ID in einem Modul schon außerhalb einer Funktion deklariert, also ist sie für alle Funktionen erreichbar. Es ist nur so, das ich anstatt 2x yes, 4x yes bekommen, obwohl in der DB nur 2 Einträge sind! Da es nur Zahlen sind, die ich vergleiche habe ich auch diese als Integer deklariert....

Da liegt es nicht, denn die Werte die ich abfrage, sind in den 2 Einträgen gleich, dann kommt 4x yes. Wenn ich aber den einen Wert verändere, sodass ich 2 verschiedene habe, dann kommt nur 1x no und 1x yes, was stimmt!

Ich glaube eher, dass was mit der Schleife nicht stimmt!

mfg
PL-q
Bitte warten ..
Mitglied: AndreasHoster
05.09.2008 um 14:04 Uhr
Na ja, wenn Du 2 Mal die gleiche ServerID in der Tabelle hast, dann findet die Abfrage in Zeile 18 natürlich auch 2 Einträge und Du wirst 2 Mal gefragt bei jedem Channelname Aufruf. Und da Channelname 2 Mal aufgerufen wird macht das 2x2=4 Abfragen.
Bitte warten ..
Mitglied: PL-q
05.09.2008 um 15:38 Uhr
Habt ihr viellt. eine Idee wie ich das Problem beheben kann? Ist für mich nähmlich sehr wichtig!
Bitte warten ..
Mitglied: PL-q
06.09.2008 um 09:20 Uhr
Könnt ihr mir wirklich nicht weiterhelfen? oder habt ihr keine lust -.-
Bitte warten ..
Mitglied: Biber
06.09.2008 um 19:08 Uhr
Moin PL-q,

Könnt ihr mir wirklich nicht weiterhelfen? oder habt ihr keine lust -.-
Wahrscheinlich.
Deshalb muss wohl ein nervenstarker Moderator ran.
Da Du offensichtlich AndreasHoster's Kommentare nicht gelesen und/oder verstanden hast, fangen wir noch mal ein bisschen eher an.

Du hast versucht, einen Einstieg in strukturiertes Programmeren zu finden und eine Aufgabe in Teilaufgaben/Einzelkomponenten zu zerlegen.
Dieser Teil des Plan ist gut und richtig.
Danach hast Du als erstes mal angetestet, ob Du die einzelnen Lego-Klötzchen ( Haupt/Unterprogramm, ResultSet bilden und satzweise durchwackeln, Debug-Meldungen auf den Schirm bringen) irgendwie miteinander kombinieren kannst.
Das heißt auf neudeutsch proof-of-concept, ist nicht nur in der Software-Entwicklung üblich, sondern -ausgenommen Politik und Castingshows- in allen Lebensbereichen. Jedenfalls bei Individuen, die eine Körpergröße von 120cm und /oder ein Alter von 120 Monaten erreicht haben.
Auch soweit ist alles in Ordnung.

Jetzt allerdings kannst Du dieses Antesten erstmal wieder beiseite legen - hat doch geklappt.
Lösch den Quatsch und kümmere Dich erstmal um den Algorithmus, also um die Schritte, die der Codeschnipsel sinnvollerweise tun soll.
Anders ausgedrückt - Du willst einen Dübel in die Wand bringen und hast Dir dazu eine Bohrmaschine, einen Bohrer und einen Dübel bereitgelegt. Die Wahrscheinlichkeit, dass Du Dein Ziel erreichst, indem Du nacheinander diese drei Dinge an die Wand wirfst ist eher gering.
Mein Tipp: schreibe Dir erstmal auf Papier in Stichpunkten/in Pseudocode auf, was das Programm oben tut. Und lies es einmal bis dreimal durch.
Und schreib in Pseudocode auf, was das Programm eigentlich tun sollte.

Dann sollte keine weitere Hilfe erforderlich sein.
Wenn doch - poste dann noch mal.
Aber bitte auch den Pseudocode.

Grüße
Biber
Bitte warten ..
Mitglied: AndreasHoster
12.09.2008 um 11:29 Uhr
Eher keine Zeit. Und im Urlaub auch keinen Internetanschluß.

Du hast da ein grundsätzliches Problem:
Du suchst im ersten Teil alle Datensätze, die einem bestimmten Kriterium entsprechen, gehst dann für jeden Datensatz in eine Subroutine, die erneut alle Datensätze, die diesem Kriterium entspricht, raussucht.
Damit ergibt sich zwwangsläufig, daß es, wenn es mehrere Datensätze gibt die dem Kriterium entsprechen, Deine Messagebox zu oft aufgerufen wird. Bsp: 3 Datensätze => Sub wird 3 Mal aufgerufen => Sub sucht 3 Datensätze raus => 3x3=9 Messageboxen.

Das lässt sich nur beheben, wenn jeder Datensatz eindeutig zu identifizieren ist, also einen Primärschlüssel hat. Dann kannst Du in der 2. Sub nach dem Primärschlüssel suchen und bekommst nur ein Ergebnis.

Alternativ, ist es sinnvoll, zwei selects auf dieselbe Tabelle zu machen?
Warum nicht ein Select * from channels und der zweiten Subroutine das Recordset als Parameter mitgeben?
Bitte warten ..
Ähnliche Inhalte
Java
DB-Mysql-Treiber
Frage von MrsPlanetJava2 Kommentare

Hallo zusammen, wenn ich versuche meine App zu starten, bekomme ich eine Fehlermeldung, dass der Mysql-Treiber nicht gefunden werden ...

Datenbanken
Schnelle Entwicklung für eine PHP, MySQL-DB?
gelöst Frage von 1410640014Datenbanken2 Kommentare

Hallo, würde mir gerne ein paar Anregungen holen, ob es für PHP und MySQL so ne Art Formular- / ...

Datenbanken
MySQL Slave DB größer als die vom Master
Frage von ckedingDatenbanken

Hallo miteinander, ich habe derzeit ein Problem welches ich nicht nachvollziehen kann. Ich habe einen MySQL Master und einen ...

Verschlüsselung & Zertifikate
Zugriff auf mySQL-DB mit ODBC und SSL
Frage von Titan24Verschlüsselung & Zertifikate2 Kommentare

Ich möchte für einen Kunden sicher Daten von einer mySQL-DB via ODBC nur lesend abgreifen können. Da die Daten ...

Neue Wissensbeiträge
Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 8 StundenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 9 StundenSicherheit7 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 10 StundenSicherheit6 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Sicherheit

Meltdown und Spectre: Die machen uns alle was vor

Information von Frank vor 10 StundenSicherheit12 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Heiß diskutierte Inhalte
Windows 10
Netbook erkennt Soundkarte nicht - keinerlei Info zum Hersteller und Modell vom Netbook und Hardware bekannt
Frage von 92943Windows 1031 Kommentare

Guten Tag, meine Schwester reist in einigen Wochen für ein paar Monate ins Ausland und hat sich dafür ein ...

Batch & Shell
Anmeldevorgang für Informatikraum (Schule) unter Windows
gelöst Frage von IngenieursBatch & Shell29 Kommentare

Hey zusammen, ich werde in naher Zukunft den Informatik Raum meiner jetzigen Schule von dem aktuellen Betreiber übernehmen (Vertrag ...

Netzwerkgrundlagen
Welches Modem für VDSL 50000 der T-Com
Frage von Windows10GegnerNetzwerkgrundlagen20 Kommentare

Hallo, ein Kollege von mir will sich VDSL50000 von der T-Com holen, um daran einen Server zu betreiben. Ich ...

Batch & Shell
AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
gelöst Frage von Winfried-HHBatch & Shell19 Kommentare

Hallo in die Runde! Ich habe eine Ergänzungsfrage zu einem alten Thread von mir. Ausgangslage ist die Batchdatei, die ...