AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Query zu "gross"?

Ein Thema von xSkaschY · begonnen am 3. Jul 2006 · letzter Beitrag vom 6. Jul 2006
Antwort Antwort
Seite 1 von 2  1 2      
xSkaschY

Registriert seit: 19. Jun 2006
Ort: Bünde
95 Beiträge
 
Delphi 2007 Professional
 
#1

Query zu "gross"?

  Alt 3. Jul 2006, 19:21
Datenbank: MySQL • Version: 4.1 • Zugriff über: dbExpress
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:

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'; Als Fehlermeldung bekomme ich folgendes vor die Füße geworfen:

Access violation at adress 00538944 in module 'imex.exe'. Read of adress 00000000.

Ich bin am verzweifeln, selbst wenn ich diesen Query benutze:

SELECT * FROM `table_03_07_06` WHERE `auftragsnr` = '056-0140642/06'; Bekomm ich diese Fehlermeldung.

Den Query führe ich so aus:

Delphi-Quellcode:
// 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;
Weiss jemand weiter?

Mit freundlichen Grüssen
Tobias Ehrig
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Query zu "gross"?

  Alt 3. Jul 2006, 19:41
´ 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?
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
xSkaschY

Registriert seit: 19. Jun 2006
Ort: Bünde
95 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Query zu "gross"?

  Alt 3. Jul 2006, 19:48
Hallo SubData,

das blöde ist, in phpMyAdmin funktioniert der Query!

Ja die Datenverbinung besteht da vorher ja mittels

SHOW COLUMNS FROM `table` die Spaltennamen ausgelesen werden.

Zu den Quotes, doch sind Sie
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Query zu "gross"?

  Alt 3. Jul 2006, 21:14
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
  Mit Zitat antworten Zitat
xSkaschY

Registriert seit: 19. Jun 2006
Ort: Bünde
95 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Query zu "gross"?

  Alt 3. Jul 2006, 22:07
Hallo Marabu,

wie kann ich das machen? Habe noch nicht so die Erfahrung mit dem Programm.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Query zu "gross"?

  Alt 4. Jul 2006, 05:24
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.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#7

Re: Query zu "gross"?

  Alt 4. Jul 2006, 05:56
Zitat von SubData:
´ und ` sind keine Zeichen die man für Quotes verwendet...
In MySQL aber schon ...
Zitat von xSkaschY:
Access violation at adress 00538944 in module 'imex.exe'. Read of adress 00000000..
.
.
Delphi-Quellcode:
// 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;
Ist das Objekt MySQLQuery an dieser Stelle schon erzeugt (mit Create)? Oder tritt der Fehler eventuell auch zwei Zeilen darüber auf (und logForm existiert noch nicht)?
  Mit Zitat antworten Zitat
xSkaschY

Registriert seit: 19. Jun 2006
Ort: Bünde
95 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Query zu "gross"?

  Alt 6. Jul 2006, 08:23
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';
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Query zu "gross"?

  Alt 6. Jul 2006, 09:02
Hallo Tobias,

Zitat von xSkaschY:
Das Objekt MySQLQuery ist schon verfügbar, da ich ein Paar Zeilen vorher schon ein Query ausführe.
das Objekt existiert, aber deine Beweisführung hinkt. Durch deinen unmotivierten Resourcen-Schutzblock würde der finally-Zweig durchlaufen, wenn das Objekt nicht existieren würde, aber vor dem try machst du schon einen Zugriff, der allem Anschein nach funktioniert.

Warum ermittelst du alle Feldnamen? In deinem Fall wäre ein SELECT * durchaus angemessen:

Delphi-Quellcode:
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;
Steht der Code im Ereignis OnResize() auch wirklich an der richtigen Stelle?

Grüße vom marabu
  Mit Zitat antworten Zitat
xSkaschY

Registriert seit: 19. Jun 2006
Ort: Bünde
95 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Query zu "gross"?

  Alt 6. Jul 2006, 09:49
Hallo Marabu,

Zitat von marabu:
Warum ermittelst du alle Feldnamen? In deinem Fall wäre ein SELECT * durchaus angemessen:
Hab mir das so aus PHP angewöhnt, da es bei mehreren Abfragen deutlisch schneller ist als ein *-Statement. Zudem weiss ich welche Felder ich verwenden kann, und muss nicht immer nachschauen.

Zitat von marabu:
Steht der Code im Ereignis OnResize() auch wirklich an der richtigen Stelle?

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...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz