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

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, 3198 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
Humor (lol)
IoT-Gefahr: Smartes Aquarium leckt!
Information von Lochkartenstanzer vor 1 TagHumor (lol)3 Kommentare

Moin, Die IoT-Manie hat weitere Opfer gefunden. Ein Casino-Leck durch ein smartes Aquarium: Allerdings haben sie kein Wasser, sondern ...

Router & Routing

Alte Fritzbox 7270 mit VPN und SIP-Telefonie hinter O2 Homebox 6641 als "Modem"

Erfahrungsbericht von the-buccaneer vor 1 TagRouter & Routing3 Kommentare

Nun war es soweit: Auch O2 hat mich mit VOIP zwangsbeglückt. Heute am Privatanschluss, in 2 Wochen ist das ...

Sicherheit

Ungepatchte Remote Code Execution-Lücke in LG NAS

Information von kgborn vor 2 TagenSicherheit

Nutzt wer LG NAS-Einheiten? In den NAS-Einheiten der LG Network Storage-Einheiten gibt es eine sehr unschöne Schwachstelle, die einen ...

Windows Update

Neue Version KB4099950 NIC Einstellungen gehen verloren

Information von sabines vor 2 TagenWindows Update2 Kommentare

Es ist eine neue Version des KB4099950 verfügbar, die das Problem mit den verlorenen Netzwerkeinstellungen lösen soll. Das Datum ...

Heiß diskutierte Inhalte
Router & Routing
Mikrotik: Routing zwischen Interfaces mit Geräten ohne Gateway
Frage von TonLichtVideoRouter & Routing18 Kommentare

Hallo zusammen, ich komme aus dem Veranstaltungstechnik Bereich und habe zwei Netze um verschiedene Hardware zu Remoten. CONTROL1 192.168.1.0/24 ...

Linux Netzwerk
Raspberry Pi 3: WLAN Power save deaktivieren
Frage von nordie92Linux Netzwerk14 Kommentare

Moin moin, mein Raspberry Pi 3 Model B benötigt eine dauerhaft aktive WLAN-Verbindung. Leider bricht die WLAN-Verbindung nach einigen ...

Vmware
Server 2008 r2 vmware terminalserver
Frage von MasterCVmware11 Kommentare

Guten Abend zusammen, ich hoffe , dass einer von euch mir weiterhelfen kann ,bei meinem kack Problem ! Ist ...

VB for Applications
VBScript mit WINscp für einfachen FTP Transfer und nachträglichem verschieben der Datei in ein erledigt Verzeichnis
Frage von KeiosIDVB for Applications9 Kommentare

Hallo, leider soll ich auf den neueren Servern(Win2016R2) keine *.Bat Dateien mehr laufen lassen. Hier soll nun alles über ...