AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken FreePascal DB neu einlesen?
Thema durchsuchen
Ansicht
Themen-Optionen

DB neu einlesen?

Ein Thema von AlexII · begonnen am 9. Okt 2014 · letzter Beitrag vom 10. Okt 2014
Antwort Antwort
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#1

DB neu einlesen?

  Alt 9. Okt 2014, 21:08
Datenbank: SQLite • Version: 3 • Zugriff über: Lazarus, SQLite3Connection
Ich habe in meiner DB eine neue Spalte hinzugefügt und frage diese nun mit meiner Anwendung ab, die diese gibt mir eine Fehlermeldung aus:

Code:
EDatabaseError
no such column: tbmain.number
Diese Spalte ist aber in der DB definitiv vorhanden und gefüllt. Erstellt ist diese auch richtig.

Ich vermute, dass mein Lazarus irgendwie noch an irgendwelche alte DB zugreift, aber kann das sein? Habe nur eine DB im Verzeichnis.

Danke falls mir jemand weiter helfen kann.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#2

AW: DB neu einlesen?

  Alt 9. Okt 2014, 21:57
Hier der ganze Code:

Delphi-Quellcode:
// Aufgaben laden
procedure TForm1.LoadJobslistByStart(aFlag: Integer; aListView: TListView);
var
  MyItem: TListItem;
  n: Integer;
begin
  try

    aListView.Items.BeginUpdate;
    aListView.Clear;

    SQLQuery1.Close;
    SQLQuery1.SQL.Text := 'SELECT tbmain.id_tbmain, '
    + 'tbmain.number, // <------- hier die Problemstelle
    + 'tbmain.title, '
    + 'tbmain.start, '
    + 'tbmain.ende, '
    + 'tbcategory.category, '
    + 'tbprocessowner.processowner, '
    + 'tbpriority.priority, '
    + 'tbstatus.status, '
    + 'tbplace.place '
    + 'FROM tbmain '
    + 'LEFT JOIN tbcategory ON tbmain.fk_category_id=tbcategory.id_tbcategory '
    + 'LEFT JOIN tbprocessowner ON tbmain.fk_processowner_id=tbprocessowner.id_tbprocessowner '
    + 'LEFT JOIN tbpriority ON tbmain.fk_priority_id=tbpriority.id_tbpriority '
    + 'LEFT JOIN tbstatus ON tbmain.fk_status_id=tbstatus.id_tbstatus '
    + 'LEFT JOIN tbplace ON tbmain.fk_place_id=tbplace.id_tbplace WHERE flag = '+ IntToStr(aFlag) +'';
    SQLQuery1.Open;

    while not SQLQuery1.Eof do
    begin
      MyItem := aListView.Items.Add;
      MyItem.Data := Pointer(SQLQuery1.FieldByName('id_tbmain').AsInteger);
      MyItem.Caption := IntToStr(SQLQuery1.FieldByName('number').AsInteger);
      MyItem.SubItems.Add(SQLQuery1.FieldByName('title').AsString);
      MyItem.SubItems.Add(SQLQuery1.FieldByName('priority').AsString);
      MyItem.SubItems.Add(DateToStr(SQLQuery1.FieldByName('start').AsDateTime));

      // Prüfen, ob Datenfeld belegt
      if not SQLQuery1.FieldByName('ende').IsNull then
        MyItem.SubItems.Add(DateToStr(SQLQuery1.FieldByName('ende').AsDateTime))
      else MyItem.SubItems.Add('');

      MyItem.SubItems.Add(SQLQuery1.FieldByName('place').AsString);
      MyItem.SubItems.Add(SQLQuery1.FieldByName('category').AsString);
      MyItem.SubItems.Add(SQLQuery1.FieldByName('processowner').AsString);
      MyItem.SubItems.Add(SQLQuery1.FieldByName('status').AsString);

      SQLQuery1.Next;
    end;

    aListView.Items.EndUpdate;

  except
    on E: Exception do MessageDlg('Die Aufgaben konnten nicht gelesen werden!'
    + #13 + #13 + E.ClassName + #13 + E.Message, mtError, [mbOk], 0);
  end;
end;
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: DB neu einlesen?

  Alt 9. Okt 2014, 22:30
  1. Warum zeigst du uns nicht die Stelle wo du die Spalte erstellst? Bzw. die Definition der Tabelle?
  2. Warum musst du den Sql-Text immer wieder zuweisen? Benutzt du die Query-Komponente auch noch für andere Abfragen? Warum? Musst du sparen? Denn dadurch verplemperst du nur unnötige Zeit. Vor der ersten Abfrage wird die Anweisung vorbereitet, die zweite Abfrage läuft dann schneller ab. Nur so muss immer wieder diese Vorbereitung durchlaufen werden.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: DB neu einlesen?

  Alt 9. Okt 2014, 23:32
Diese Spalte ist aber in der DB definitiv vorhanden und gefüllt. Erstellt ist diese auch richtig.

Ich vermute, dass mein Lazarus irgendwie noch an irgendwelche alte DB zugreift, aber kann das sein? Habe nur eine DB im Verzeichnis.
Solltest Du damit Recht haben, so muß die Connection überprüft werden.

trotzdem würde ich mit
Code:
select * from tbmain
mal überprüfen welche Spalten nun wirklich vorhanden sind - denn die Definition ist ja vollkommen korrekt (?).

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: DB neu einlesen?

  Alt 10. Okt 2014, 11:15
Ist NUMBER kein reserviertes Token in SQLite?

Grüße
Mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
Poelser

Registriert seit: 21. Apr 2008
Ort: Europa
145 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: DB neu einlesen?

  Alt 10. Okt 2014, 15:51
Laut https://www.sqlite.org/lang_keywords.html gehört NUMBER nicht zu den reservierten Begriffen.
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#7

AW: DB neu einlesen?

  Alt 10. Okt 2014, 16:04
Das Problem hat sich gelöst, es lag am falschem Verzeichnis. Hat mir aber gut getan, habe noch nie an einem Tag so viel über DBken und Lazarus gelernt.

Danke für eine Tipps.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#8

AW: DB neu einlesen?

  Alt 10. Okt 2014, 16:05
  1. Warum musst du den Sql-Text immer wieder zuweisen? Benutzt du die Query-Komponente auch noch für andere Abfragen? Warum? Musst du sparen? Denn dadurch verplemperst du nur unnötige Zeit. Vor der ersten Abfrage wird die Anweisung vorbereitet, die zweite Abfrage läuft dann schneller ab. Nur so muss immer wieder diese Vorbereitung durchlaufen werden.
Das verstehe ich nicht ganz...
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

AW: DB neu einlesen?

  Alt 10. Okt 2014, 16:42
Schreib doch das SQL über den Objektinspektor (genauer: den Property-Editor) fest in die Query und benutze für die variablen Werte Parameter. Du musst dann zur Laufzeit nur noch die Parameter befüllen, das geht um Einiges schneller.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:17 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