Einzelnen Beitrag anzeigen

Kratons

Registriert seit: 20. Okt 2014
Ort: Deutschland
12 Beiträge
 
FreePascal / Lazarus
 
#1

SQLite: sql_master abfragen

  Alt 11. Nov 2014, 18:51
Hi liebe community,
ich habe momentan ein kleines problem.

Untzwa frage ich mit SQLite die tabelle sqlite_master ab um die vorhandenen tabellen zu erhalten.

Code:
function GetDB(dbC: TSQLite3Connection;dbQ: TSQLQuery;dbT: TSQLTransaction): TStringList;
  var
    slist, tname: TStringList;
    n: Integer;
begin
   slist:= TStringList.Create;
   tname:= TStringList.Create;
   dbQ.SQL.Text:='SELECT name FROM sqlite_master WHERE type = ''table''';
   dbQ.Open;
   dbQ.First;
   while dbQ.EOF = false do
      begin
        if not (dbQ.FieldByName('name').AsString = 'sqlite_sequence') then
        tname.Add(dbQ.FieldByName('name').AsString);
        dbQ.Next;
      end;
   dbQ.Close;
   For n := 0 to tname.Count-1 do
   begin
     dbQ.SQL.Text:='SELECT * FROM ''' + tname[n] + '''';
Hier tritt der fehler auf
Code:
     dbQ.ExecSQL;
     dbQ.Open;
     dbQ.First;
     while dbQ.EOF = false do
        begin
          if dbQ.FieldByName('chg').AsString = '1' then
             slist.Add(GetDBset(tname[n],dbQ.FieldByName('id').AsString,dbC,dbQ,dbT));
          if dbQ.FieldByName('chg').AsString = '2' then
             slist.Add(GetDBset(tname[n],dbQ.FieldByName('id').AsString,dbC,dbQ,dbT));
          dbQ.Next;
        end;
   end;
end;
Hier sollten nun in die Stringlist die namen der tabellen eingetragen worden sein ..
also so:
user
artikel
company
customers
customers_adr
customers_tel
rechnung
rechnung_artikel
machines

ich weiß nicht ob es hilft aber hier nochmal der aufbau der sqlite_master tabelle welche ich abrufe (diese wird automatisch mit der datenbank erstellt!)

# type name tbl_name Rootpage SQL
1 table user user 2 CREATE TABLE 'us
2 index sqlite_autoindexuser 3
3 index sqlite_autoindexuser 4
4 table artikel artikel 5 CREATE TABLE 'ar
5 index sqlite_autoindexartikel 6
6 table company company 7 CREATE TABLE 'co
7 table sqlite_sequence sqlite_sequence 8 CREATE TABLE sql
8 table customers customers 9 CREATE TABLE 'cu
9 index sqlite_autoindexcustomers 10
10table customers_adr customers_adr 13CREATE TABLE 'cu
11index sqlite_autoindexcustomers_adr 14
12table customers_tel customers_tel 15CREATE TABLE 'cu
13index sqlite_autoindexcustomers_tel 16
14table rechnung rechnung 17CREATE TABLE 're
15index sqlite_autoindexrechnung 18
16table rechnung_artikelrechnung_artikel20CREATE TABLE 're
17index sqlite_autoindexrechnung_artikel21
18table machines machines 22CREATE TABLE 'ma
19index sqlite_autoindexmachines 23
20index sqlite_autoindexmachines 24
21triggertuserchg user 0 CREATE TRIGGER t
22triggertartikelchg artikel 0 CREATE TRIGGER t
23triggertcompanychg company 0 CREATE TRIGGER t
24triggertcustomerschg customers 0 CREATE TRIGGER t
25triggertcustomers_adrchcustomers_adr 0 CREATE TRIGGER t
26triggertcustomers_telchcustomers_tel 0 CREATE TRIGGER t
27triggertrechnungchg rechnung 0 CREATE TRIGGER t
28triggertrechnung_artikerechnung_artikel0 CREATE TRIGGER t
29triggertmachineschg machines 0 CREATE TRIGGER t

Hierbei wird mir allerdings sobald ich die Funktion aufrufe (kommpiliren funktionirt problemlos) der fehler ausgegeben:
DatabaseERROR "no such table 'Benutzername'"

dies stehl allerdings nicht in der tabelle noch frage ich die datenbank nach betutzername, ich will doch die spalte name haben)
und die einzigste stelle die mir einfällt wo benutzername vorkommt ist im login fenster, bzw. jetzt zum testn als username (global als guser hinterlegt!)


Ich hoffe jemand weiß was los ist ich stecke jetzt sein 2 tagen fest und kriege es nicht raus...
Schonmal danke im vorraus an alle die helfen können!

Die Antwort: 42

Geändert von Kratons (11. Nov 2014 um 20:09 Uhr)
  Mit Zitat antworten Zitat