AGB  ·  Datenschutz  ·  Impressum  







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

SQLite: sql_master abfragen

Ein Thema von Kratons · begonnen am 11. Nov 2014 · letzter Beitrag vom 12. Nov 2014
Antwort Antwort
Kratons

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

SQLite: sql_master abfragen

  Alt 11. Nov 2014, 17: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 19:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: SQLite: sql_master abfragen

  Alt 12. Nov 2014, 09:49
[QUOTE=Kratons;1279403]Hier tritt der fehler auf
Welcher denn??
Code:
     dbQ.ExecSQL;
     dbQ.Open;
     dbQ.First;
Du solltest nur
Code:
dbq.Open
verwenden, dbQ.ExecSql wird von den meisten Schnittstellen für Update und Insert Anweisungen verwendet.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  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: SQLite: sql_master abfragen

  Alt 12. Nov 2014, 11:19
Der Aufruf von dbQ.ExecSQL; ist zwar überflüssig ist aber nicht der Grund für den Fehler.

Es wäre interessant zu wissen, was tatsächlich in tname enthalten ist und nicht, was dort drin stehen sollte!

Debugger oder einfache Ausgabe als Text und dann anschauen.
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
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 23:08 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