![]() |
Datenbank: MySQL • Version: 4.1 • Zugriff über: dbExpress
Query zu "gross"?
Hallo,
ich bin's mal wieder. Habe zur Zeit ein Problem mit einem etwas grösseren Query den mein Delphi wohl nicht verarbeiten kann. Der Query schaut folgendermasen aus:
SQL-Code:
Als Fehlermeldung bekomme ich folgendes vor die Füße geworfen:
SELECT `id`, `montuerid`, `montuer`, `auftragsnr`, `aki`, `onkz`, `asb`, `rufnr`, `strstandort`, `lsz`, `lszz`, `kuzeit`, `hvt`, `kvt`, `x12`, `x14`, `x16`, `x19`, `bemerkung`, `tea2x6`, `ntbaeinschub`, `montagebericht`, `courtesycall`, `rosikenner`, `erstehvtschaltung`, `erstekvtschaltung`, `fehlerimzugangsnetz`, `endleitungsnetz`, `anschlussbereitstellenamhvt`, `kundenfahrtbebeibae`, `anschlussbereitstellenbeimkunden`, `endleitungapl`, `antrittspauchalefuerexpressauftreage`, `stundenverrechnungssatz`, `zulagefuerweiterehvtschaltung`, `zulagefuerweiterekvtschaltung`, `installationskabel2da`, `installationskabel2dabis10da`, `verteileinrichtungen2da`, `schaltenmitgeschirmtenschaltdraht` FROM `table_03_07_06` WHERE `auftragsnr` = '056-0140642/06';
Access violation at adress 00538944 in module 'imex.exe'. Read of adress 00000000. Ich bin am verzweifeln, selbst wenn ich diesen Query benutze:
SQL-Code:
Bekomm ich diese Fehlermeldung.
SELECT * FROM `table_03_07_06` WHERE `auftragsnr` = '056-0140642/06';
Den Query führe ich so aus:
Delphi-Quellcode:
Weiss jemand weiter?
// Ermittelt alle Auftragsdaten
statement := 'SELECT'+relevantfields+' FROM `' + main.Tabellenname + '` WHERE `auftragsnr` = '''+main.AuftragsNr+''';'; logForm.SQLAbfragen.Items.Add('Auftrags-Detail Query: ' + statement); MySQLQuery.SQL.Text := statement; MySQLQuery.Open; Mit freundlichen Grüssen Tobias Ehrig |
Re: Query zu "gross"?
´ und ` sind keine Zeichen die man für Quotes verwendet...
Ausserdem fehlen dir an manchen Stellen ein paar Leerzeichen, geh mal mit dem Debugger auf das Statement und schau dir mal an, wie das fertige Statement hinterher aussieht... Edit: So ganz nebenbei, ist denn die Verbindung zur Datenbank überhaupt aufgebaut? Die Komponenten alle erstellt? Der SQL Server überhaupt aktiv? :) |
Re: Query zu "gross"?
Hallo SubData,
das blöde ist, in phpMyAdmin funktioniert der Query! Ja die Datenverbinung besteht da vorher ja mittels
SQL-Code:
die Spaltennamen ausgelesen werden.
SHOW COLUMNS FROM `table`
Zu den Quotes, doch sind Sie ;) |
Re: Query zu "gross"?
Hallo Tobias,
die Zugriffsadresse 0 deutet auf einen NIL Pointer hin. Halte doch das Programm an der Fehlerstelle einmal an und inspiziere die einzelnen Zeiger. Grüße vom marabu |
Re: Query zu "gross"?
Hallo Marabu,
wie kann ich das machen? Habe noch nicht so die Erfahrung mit dem Programm. :angel2: |
Re: Query zu "gross"?
Setzte einen Brekpoint an der Zeile, in der der Fehler ausgelöst wird und Starte dann das Programm in der IDE. Nun kannst du dir die aktuellen werte der einzelnen Variablen anzeigen lassen.
|
Re: Query zu "gross"?
Zitat:
Zitat:
|
Re: Query zu "gross"?
Hallo r_kerber,
Das Objekt MySQLQuery ist schon verfügbar, da ich ein Paar Zeilen vorher schon ein Query ausführe. Hier mal die Prozedur:
Delphi-Quellcode:
procedure TformAuftragsedit.FrameResize(Sender: TObject);
var relevantfields: String; begin mysql_connect(); value_auftragsnummer.Caption := main.AuftragsNr; relevantfields := ''; if MySQLConnection.Connected then begin MySQLQuery.SQL.Clear; MySQLQuery.SQLConnection := MySQLConnection; // Ermittelt alle verfügbaren Spaltennamen und speichert sie in 'relevantfields'. try statement := 'SHOW COLUMNS FROM `' + main.Tabellenname + '`'; formLog.SQLAbfragen.Lines.Add('TformAuftragsedit.FrameResize (Line: 84):'); formLog.SQLAbfragen.Lines.Add(statement); formLog.SQLAbfragen.Lines.Add(''); MySQLQuery.SQL.Text := statement; MySQLQuery.Open; while not MySQLQuery.EOF do begin relevantfields := relevantfields + ', `' + MySQLQuery.FieldByName('Field').AsString + '`'; MySQLQuery.Next; end; Delete(relevantfields, 1, 1); MySQLQuery.SQL.Clear; finally // Ermittelt alle Auftragsdaten statement := 'SELECT '+relevantfields+' FROM ' + main.Tabellenname + ' WHERE auftragsnr = '''+main.AuftragsNr+''';'; showmessage(statement); formLog.SQLAbfragen.Lines.Add('TformAuftragsedit.FrameResize (Line: 100):'); formLog.SQLAbfragen.Lines.Add(statement); formLog.SQLAbfragen.Lines.Add(''); MySQLQuery.SQL.Text := statement; (* * Hier bekomme ich die AV! *) MySQLQuery.Open; //value_montuer.Text := MySQLQuery.FieldByName('montuer').AsString; MySQLQuery.Close; end; end; end; Im SQLAbfragen Fenster steht diese SQL-Statements drin:
SQL-Code:
// TformAuftragsedit.FrameResize (Line: 84):
SHOW COLUMNS FROM `table_03_07_06` // TformAuftragsedit.FrameResize (Line: 100): SELECT `id`, `montuerid`, `montuer`, `auftragsnr`, `aki`, `onkz`, `asb`, `rufnr`, `strstandort`, `lsz`, `lszz`, `kuzeit`, `hvt`, `kvt`, `x12`, `x14`, `x16`, `x19`, `bemerkung`, `tea2x6`, `ntbaeinschub`, `montagebericht`, `courtesycall`, `rosikenner`, `erstehvtschaltung`, `erstekvtschaltung`, `fehlerimzugangsnetz`, `endleitungsnetz`, `anschlussbereitstellenamhvt`, `kundenfahrtbebeibae`, `anschlussbereitstellenbeimkunden`, `endleitungapl`, `antrittspauchalefuerexpressauftreage`, `stundenverrechnungssatz`, `zulagefuerweiterehvtschaltung`, `zulagefuerweiterekvtschaltung`, `installationskabel2da`, `installationskabel2dabis10da`, `verteileinrichtungen2da`, `schaltenmitgeschirmtenschaltdraht` FROM table_03_07_06 WHERE auftragsnr = '056-0129101/06'; |
Re: Query zu "gross"?
Hallo Tobias,
Zitat:
Warum ermittelst du alle Feldnamen? In deinem Fall wäre ein SELECT * durchaus angemessen:
Delphi-Quellcode:
Steht der Code im Ereignis OnResize() auch wirklich an der richtigen Stelle?
procedure TformAuftragsedit.FrameResize(Sender: TObject);
var relevantfields: String; begin mysql_connect(); value_auftragsnummer.Caption := main.AuftragsNr; if MySQLConnection.Connected then begin MySQLQuery.SQLConnection := MySQLConnection; // Ermittelt alle Auftragsdaten statement := Format('SELECT * FROM %s WHERE auftragsnr = :nr', [main.TabellenName]); MySQLQuery.SQL.Text := statement; MySQLQuery.Parameters.ParamByName('nr').AsString := main.AuftragsNr; // oder Params? MySQLQuery.Open; formLog.SQLAbfragen.Lines.Add('TformAuftragsedit.FrameResize (Line: 100):'); formLog.SQLAbfragen.Lines.Add(statement); formLog.SQLAbfragen.Lines.Add(''); value_montuer.Text := MySQLQuery.FieldByName('montuer').AsString; // Monteur ... // ... MySQLQuery.Close; end; end; Grüße vom marabu |
Re: Query zu "gross"?
Hallo Marabu,
Zitat:
Zitat:
Will ich hoffen, er wird nämlich 2-mal ausgeführt. Warum weiss ich nicht! BTW: Es gibt auch eine AV mit deiner Variante. Ich verweifel langsam. Habe testweise mal ein ExecSQL(); benutzt, der Query scheint OK zu sein, weil es keine Fehler gibt? Nur hab ich ja dabei keine rückgabe. Bis dahin, und weiter... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz