Fehler bei SQLite3, findet nicht das was da ist

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.

Fehler bei SQLite3, findet nicht das was da ist

Beitragvon Aphadias » 30. Nov 2017, 16:55 Fehler bei SQLite3, findet nicht das was da ist

moin

ich versuche mal mein Problem so gut wie es geht zu erklären. Ich habe schon seit bestimmt jetzt ein halbes Jahr eine DB (SQLite3) in benutzung. Ging immer tadelos. So ich wollte jetzt nun aber diese Tabelle mit Werten erweitern. Um ein Datenbank-Chaos zu vermeiden habe ich die hinten ran gesetzt an den letzten Datensatz ("datum5").

die Spalten sind also menge1 charge1 datum1 .... bla bla bla .... menge5 charge5 datum5 danach jetzt neu -> soll insgesamt einheit1...... einheit5

es sind nur Daten dazwischen geschoben in meiner Tabelle zum Ansehen aber in der DB ist alles Neue hinten dran. Nur habe ich jetzt das Problem das er Datum5 nicht mehr kennt!

als Fehler öffnet sich ein neues Fenster mit 000000010029B533 498b442420 mov 0x20(%r12),%rax
und vorher sagte er mir querymat: Field not found: "datum5"

Jetzt kommt der Witz dabei..... erschreibt es trotzdem an die richtige Stelle in der DB!!!!! :shock:

ich fühle mich da leicht verarscht.... ich habe nichts irgend wie geändert sondern alles neue nur hinten dran gesetzt. Da er es trotzdem in die Datenbank schreibt verstehe ich nicht warum er es denn nicht findet.
Wenn ich es editiere und abspeichere übernimmt er es ohne zu meckern aber sobald ich es neu anlege dann meckert er rum.

Seit 3 Tagen versuche ich nun den Fehler zu finden im Quelltext aber es ist nichts zu finden und wieso schreibt er trotzdem in die Datenbank?!

Code: Alles auswählen
//Parameter anlegen
    Fstart.querymat.SQL.Clear;
    Fstart.querymat.Params.Clear;
 
    Fstart.querymat.Params.CreateParam(ftString,'name',ptInputOutput);
    Fstart.querymat.Params.CreateParam(ftString,'lage',ptInputOutput);
    Fstart.querymat.Params.CreateParam(ftInteger,'soll',ptInputOutput);
    Fstart.querymat.Params.CreateParam(ftInteger,'insgesamt',ptInputOutput);
    Fstart.querymat.Params.CreateParam(ftInteger,'menge1',ptInputOutput);
    Fstart.querymat.Params.CreateParam(ftString,'einheit1',ptInputOutput);
    Fstart.querymat.Params.CreateParam(ftString,'charge1',ptInputOutput);
    Fstart.querymat.Params.CreateParam(ftDate,'datum1',ptInputOutput);
    Fstart.querymat.Params.CreateParam(ftInteger,'menge2',ptInputOutput);
    Fstart.querymat.Params.CreateParam(ftString,'einheit2',ptInputOutput);
    Fstart.querymat.Params.CreateParam(ftString,'charge2',ptInputOutput);
    Fstart.querymat.Params.CreateParam(ftDate,'datum2',ptInputOutput);
    Fstart.querymat.Params.CreateParam(ftInteger,'menge3',ptInputOutput);
    Fstart.querymat.Params.CreateParam(ftString,'einheit3',ptInputOutput);
    Fstart.querymat.Params.CreateParam(ftString,'charge3',ptInputOutput);
    Fstart.querymat.Params.CreateParam(ftDate,'datum3',ptInputOutput);
    Fstart.querymat.Params.CreateParam(ftInteger,'menge4',ptInputOutput);
    Fstart.querymat.Params.CreateParam(ftString,'einheit4',ptInputOutput);
    Fstart.querymat.Params.CreateParam(ftString,'charge4',ptInputOutput);
    Fstart.querymat.Params.CreateParam(ftDate,'datum4',ptInputOutput);
    Fstart.querymat.Params.CreateParam(ftInteger,'menge5',ptInputOutput);
    Fstart.querymat.Params.CreateParam(ftString,'einheit5',ptInputOutput);
    Fstart.querymat.Params.CreateParam(ftString,'charge5',ptInputOutput);
    Fstart.querymat.Params.CreateParam(ftDate,'datum5',ptInputOutput);

Code: Alles auswählen
//Parameter beschreiben
Fstart.querymat.ParamByName('name').Text:=Fmat.name.Text;
    Fstart.querymat.ParamByName('lage').Text:=Fmat.lagerort.Text;
    if soll.Text = '' then
      Fstart.querymat.ParamByName('soll').Clear
    else
      Fstart.querymat.ParamByName('soll').AsInteger:=strtoint(Fmat.soll.Text);
    Fstart.querymat.ParamByName('insgesamt').AsInteger:=total;
    if menge1.Text = '' then
      Fstart.querymat.ParamByName('menge1').Clear
    else
      Fstart.querymat.ParamByName('menge1').AsInteger:=strtoint(Fmat.menge1.Text);
    Fstart.querymat.ParamByName('einheit1').Text:=Fmat.einheit1.Text;
    Fstart.querymat.ParamByName('charge1').Text:=Fmat.charge1.Text;
    if datetostr(Fmat.datum1.Date) <> '01.01.2017' then
      Fstart.querymat.ParamByName('datum1').AsDate:=Fmat.datum1.Date;
 
    if menge2.Text = '' then
      Fstart.querymat.ParamByName('menge2').Clear
    else
      Fstart.querymat.ParamByName('menge2').AsInteger:=strtoint(Fmat.menge2.Text);
    Fstart.querymat.ParamByName('einheit2').Text:=Fmat.einheit2.Text;
    Fstart.querymat.ParamByName('charge2').Text:=Fmat.charge2.Text;
    if datetostr(Fmat.datum2.Date) <> '01.01.2017' then
      Fstart.querymat.ParamByName('datum2').AsDate:=Fmat.datum2.Date;
 
    if menge3.Text = '' then
      Fstart.querymat.ParamByName('menge3').Clear
    else
      Fstart.querymat.ParamByName('menge3').AsInteger:=strtoint(Fmat.menge3.Text);
    Fstart.querymat.ParamByName('einheit3').Text:=Fmat.einheit3.Text;
    Fstart.querymat.ParamByName('charge3').Text:=Fmat.charge3.Text;
    if datetostr(Fmat.datum3.Date) <> '01.01.2017' then
      Fstart.querymat.ParamByName('datum3').AsDate:=Fmat.datum3.Date;
 
    if menge4.Text = '' then
      Fstart.querymat.ParamByName('menge4').Clear
    else
      Fstart.querymat.ParamByName('menge4').AsInteger:=strtoint(Fmat.menge4.Text);
    Fstart.querymat.ParamByName('einheit4').Text:=Fmat.einheit4.Text;
    Fstart.querymat.ParamByName('charge4').Text:=Fmat.charge4.Text;
    if datetostr(Fmat.datum4.Date) <> '01.01.2017' then
      Fstart.querymat.ParamByName('datum4').AsDate:=Fmat.datum4.Date;
 
    if menge5.Text = '' then
      Fstart.querymat.ParamByName('menge5').Clear
    else
      Fstart.querymat.ParamByName('menge5').AsInteger:=strtoint(Fmat.menge5.Text);
    Fstart.querymat.ParamByName('einheit5').Text:=Fmat.einheit5.Text;
    Fstart.querymat.ParamByName('charge5').Text:=Fmat.charge5.Text;
    if datetostr(Fmat.datum5.Date) <> '01.01.2017' then
      Fstart.querymat.ParamByName('datum5').AsDate:=Fmat.datum5.Date;


Code: Alles auswählen
//SQL Befehl zum neu Anlegen
Fstart.querymat.SQL.Text:='insert into mat (name,lage,menge1,charge1,datum1,menge2,charge2,datum2,menge3,charge3,datum3,menge4,charge4,datum4,menge5,charge5,datum5,soll,insgesamt,einheit1,einheit2,einheit3,einheit4,einheit5)'+
                                         'values (:name,:lage,:menge1,:charge1,:datum1,:menge2,:charge2,:datum2,:menge3,:charge3,:datum3,:menge4,:charge4,:datum4,:menge5,:charge5,:datum5,:soll,:insgesamt,:einheit1,:einheit2,:einheit3,:einheit4,:einheit5)';
 
      Fstart.querymat.ExecSQL;
Aphadias
 
Beiträge: 90
Registriert: 28. Okt 2015, 18:28

Beitragvon Epcop » 30. Nov 2017, 17:43 Re: Fehler bei SQLite3, findet nicht das was da ist

ganz kurz:
Kannst du den Text im letzten Feld noch lesbar reinschreiben? irgendwo ein leerzeichen, damit ein zeilenumbruch reingeht und der text ganz zu sehen ist
Epcop
 
Beiträge: 67
Registriert: 29. Mai 2012, 08:36

Beitragvon Epcop » 30. Nov 2017, 18:20 Re: Fehler bei SQLite3, findet nicht das was da ist

Bei welcher Zeile stoppt er denn mit der Meldung??

Also Konkret habe ich im Code nichts gefunden.


Ein paar Anregungen:


=> Was passiert eigentlich, wenn datetostr(Fmat.datum5.Date) gleich "01.01.2017" ist? Dann fällt ja das ...parambyname datum5... raus. (Kann es evtl. mit dem Jahreswechsel zusammenhängen 01.01.2017 statt 01.01.2018, o.ä.?).

Was steht eigentlich nach der letzten if datetostr(Fmat.datum5.Date)? kommt ...parambyname datum5... dann nochmal vor in irgendeiner art? Die Daten die gespeichert weden, sind das auch wirklich die richtigen?


- Woher kommt der Inhalt von Fmat.datum5.Date? Gibt es überhaupt ein "datetostr(Fmat.datum5.Date)"? Was steht dort drinnen?
- Gibt es noch andere Querys, die du noch nicht aktualisiert hast? Vielleicht als "Default" irgendwo?
- Hast du vielleicht mehrere SQLite DB angelegt und den Pfad o.ä. noch nicht verändert?
- Projekt gespeichert und "Neu kompilieren" schon versucht?
- datum5 ist auch wirklich wirklich in der richtigen Tabelle in der DB?
- Gibt es vielleicht irgendwo ein fehlerhaftes Select mit datum5?
Epcop
 
Beiträge: 67
Registriert: 29. Mai 2012, 08:36

Beitragvon Soner » 30. Nov 2017, 21:55 Re: Fehler bei SQLite3, findet nicht das was da ist

Das hört sich wieder nach persistente Felder an. Klick auf deine Datenbankkomponente (Fstart ?) mit rechten Maustaste und wähle aus dem Menu "Felder bearbeiten".
Genau diesen Fehler bekommt man, wenn man einmal persistente Felder erstellt und später SQL-Erweitert. Da kann man Stundenlang nach Fehler suchen.
Wenn ich persistente Felder benutze mache ich immer vor Implementation immer so ein Notiz:
"ACHTUNG PERSISTENTE FELDER"
Soner
 
Beiträge: 372
Registriert: 26. Sep 2012, 23:07
Wohnort: Hamburg
OS, Lazarus, FPC: Win7Pro-32Bit, Immer letzte Lazarus Release mit SVN-Fixes | 
CPU-Target: 32Bit
Nach oben

Beitragvon Aphadias » 2. Dez 2017, 15:02 Re: Fehler bei SQLite3, findet nicht das was da ist

Epcop hat geschrieben:ganz kurz:
Kannst du den Text im letzten Feld noch lesbar reinschreiben? irgendwo ein leerzeichen, damit ein zeilenumbruch reingeht und der text ganz zu sehen ist


hier noch mal verbessert
Code: Alles auswählen
Fstart.querymat.SQL.Text:='insert into mat (name,lage,menge1,charge1,datum1,menge2,charge2,datum2,menge3,charge3,datum3,menge4,charge4,
datum4,menge5,charge5,datum5,soll,insgesamt,einheit1,einheit2,einheit3,einheit4,einheit5)'
+
                                         'values (:name,:lage,:menge1,:charge1,:datum1,:menge2,:charge2,:datum2,:menge3,:charge3,:datum3,:menge4,:charge4
,:datum4,:menge5,:charge5,:datum5,:soll,:insgesamt,:einheit1,:einheit2,:einheit3,:einheit4,:einheit5)'
;
 
      Fstart.querymat.ExecSQL


Epcop hat geschrieben:Bei welcher Zeile stoppt er denn mit der Meldung??

Also Konkret habe ich im Code nichts gefunden.


Ein paar Anregungen:


=> Was passiert eigentlich, wenn datetostr(Fmat.datum5.Date) gleich "01.01.2017" ist? Dann fällt ja das ...parambyname datum5... raus. (Kann es evtl. mit dem Jahreswechsel zusammenhängen 01.01.2017 statt 01.01.2018, o.ä.?).

Was steht eigentlich nach der letzten if datetostr(Fmat.datum5.Date)? kommt ...parambyname datum5... dann nochmal vor in irgendeiner art? Die Daten die gespeichert weden, sind das auch wirklich die richtigen?


- Woher kommt der Inhalt von Fmat.datum5.Date? Gibt es überhaupt ein "datetostr(Fmat.datum5.Date)"? Was steht dort drinnen?
- Gibt es noch andere Querys, die du noch nicht aktualisiert hast? Vielleicht als "Default" irgendwo?
- Hast du vielleicht mehrere SQLite DB angelegt und den Pfad o.ä. noch nicht verändert?
- Projekt gespeichert und "Neu kompilieren" schon versucht?
- datum5 ist auch wirklich wirklich in der richtigen Tabelle in der DB?
- Gibt es vielleicht irgendwo ein fehlerhaftes Select mit datum5?


01.01.2017 ist mein NULL Date und hatte damit probleme wegen NULL in der Datenbank. Deswegen habe ich es erst mal abgefangen und es gab noch nie Probleme damit. Später will ich es noch mal verbessern. Aber wenn was anderes als 01.01.2017 da steht dann wird das Datum dann bearbeitet.
Ne es ist die einzigste Query die ich verändert habe.
Ja habe mehrere DB aber der Pfad wurde nicht geändert.
Neu kompilieren versuche ich gleich mal.... hatte noch nicht daran gedacht 8)
datum5 ist in der richtigen Tab. ;)
Ich finde kein fehlerhaftes Select mit Datum5.

Soner hat geschrieben:Das hört sich wieder nach persistente Felder an. Klick auf deine Datenbankkomponente (Fstart ?) mit rechten Maustaste und wähle aus dem Menu "Felder bearbeiten".
Genau diesen Fehler bekommt man, wenn man einmal persistente Felder erstellt und später SQL-Erweitert. Da kann man Stundenlang nach Fehler suchen.
Wenn ich persistente Felder benutze mache ich immer vor Implementation immer so ein Notiz:
"ACHTUNG PERSISTENTE FELDER"


ich prüfe mal und melde mich dann noch mal
Aphadias
 
Beiträge: 90
Registriert: 28. Okt 2015, 18:28

Beitragvon Aphadias » 2. Dez 2017, 15:05 Re: Fehler bei SQLite3, findet nicht das was da ist

Soner hat geschrieben:Das hört sich wieder nach persistente Felder an. Klick auf deine Datenbankkomponente (Fstart ?) mit rechten Maustaste und wähle aus dem Menu "Felder bearbeiten".
Genau diesen Fehler bekommt man, wenn man einmal persistente Felder erstellt und später SQL-Erweitert. Da kann man Stundenlang nach Fehler suchen.
Wenn ich persistente Felder benutze mache ich immer vor Implementation immer so ein Notiz:
"ACHTUNG PERSISTENTE FELDER"


habe ebend noch mal geschaut und habe dort keine Felder drinne.... ist alles leer
Aphadias
 
Beiträge: 90
Registriert: 28. Okt 2015, 18:28

Beitragvon Epcop » 2. Dez 2017, 18:17 Re: Fehler bei SQLite3, findet nicht das was da ist

Zeigt er dir die fehlerhafte Zeile an, die Schuld sein soll?
Epcop
 
Beiträge: 67
Registriert: 29. Mai 2012, 08:36

• Themenende •

Zurück zu Datenbanken



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried