Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

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

Frage Entwicklung VB for Applications

Mitglied: PL-q

PL-q (Level 1) - Jetzt verbinden

04.09.2008, aktualisiert 12.09.2008, 3144 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 =)

Mit freundlichen Grüßen
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!

Mit freundlichen Grüßen
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 ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Webbrowser
gelöst Daten in entfernte Mysql DB schreiben (3)

Frage von nullacht15 zum Thema Webbrowser ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

DSL, VDSL
DSL-Signal bewerten (12)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (8)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...