![]() |
Datenbank: sqlite • Version: 3 • Zugriff über: Zeos
Hilfe bei sqlite und Zeos Komponente gesucht
Hi, ich möchte einen Vokabeltrainer schreiben, der auf einer sqlite Datenbank basiert. Mit sqlite kenn ich mich bereits etwas aus (habe schon mit mysql und php gearbeitet), allerdings habe ich so gar keine Ahnung wie man sqlite jetzt in Delphi nutzt. Ich habe mir bereits die Zeos Komponenten installiert und suche jetzt ein gutes Tutorial dazu oder jemanden der mir etwas helfen würde, was vermutlich besser funktioniert als wenn ich meine 100 Fragen jetzt hier reinschreibe.
|
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Um was geht es dir genau_
-SqLite -Zeos -Datenbankhandling in Delphi was ganz anderes ? |
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Hallo erstmal,
also Tutorials findest Du hier. Ansonsten kann ich nur die selbe Frage stellen wie Markus. Gruß Jens |
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Eher Datenbankhandling in Delphi. Also ich werde 2 Tabellen und eine Verknüpfungstabelle haben. Ich müsste die Tabellen erstellen, Daten eintragen (mit entsprechenden Verknüpfungen), Daten auslesen (einen Eintrag aus Tabelle 1 auswählen und alle damit Verknüpften Einträge aus Tabelle 2 auslesen - ich denk da wird man sowas wie Join nutzen können), Einträge ändern (einzelne/alle), ...
Die dafür nötigen SQL Befehle sind mir ungefähr bekannt, allerdings habe ich keine Ahnung wie ich das nun mit den Zeos Komponenten (sauber) umsetze und vor allem ist mir noch total unklar wo dann die Antworten der Datenbank stehen und wie ich auf diese Zugreife. Und dazu habe ich hier noch keine guten Tutorials gefunden. |
Re: Hilfe bei sqlite und Zeos Komponente gesucht
|
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Ja, aber so ganz das wahre ist das irgendwie nicht. Da steht zwar ne Menge Text, aber mir käm es ja eher auf Beispielcode an und deswegen wärs glaub ich cool wenn man wenn hätte denn man mal schnell über ICQ oder so fragen kann.
|
Re: Hilfe bei sqlite und Zeos Komponente gesucht
In den Tutorials steht eigentlich alles:
-Allgemeines Datenbankhandling in Delphi -Umgang mit Zeos in Verbindung mit den Zeos spezifischen Anleitungen der ![]() |
Re: Hilfe bei sqlite und Zeos Komponente gesucht
jaja, dann danke für die "tolle" Hilfe ...
|
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Was ist denn los? Wenn Du noch weitergehende Fragen hast, die über den Inhalt der verlinkten Tutorials hinausgehen, kannst Du sie gerne hier stellen. Meist dauert es nur unwesentlich länger, bis eine Antwort kommt, als wenn Du direkt über ICQ fragst. Außerdem bekommst Du so auch u.U. mehrere Sichtweisen und Lösungsansätze, was ja auch nicht zu unterschätzen ist. Von daher verstehe ich diese beleidigte Reaktion nicht.
|
Re: Hilfe bei sqlite und Zeos Komponente gesucht
a) es dauert schon länger (es unterbricht etwas im Programmierfluss)
b) es sind so ne Kleinigkeiten für die ich nicht immer einen Thread aufmachen möchte c) ich kenne die Tutorials bereits und die erneute Hinweis auf diese war nicht sehr hilfreich Trotzdem danke für eure Antworten Ich lass mich ja gerne eines besseren belehren. Dann werd ich einfach alle Fragen die immer mal wieder so aufkommen hier reinschreiben. |
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Damit nicht jeder immer andere Variablennamen verwendet geb ich mal einen Anfang vor.
Delphi-Quellcode:
Dabei sind
gCon := TZConnection.Create(nil);
Q := TZQuery.Create(nil); with gCon do begin Protocol := 'sqlite-3'; Database := 'asdf.db'; Connect; end; Q.Connection := gCon;
Delphi-Quellcode:
private Variablen einer der Klasse in der das ganze geschehen soll.
gCon: TZConnection;
Q: TZQuery; Die Klasse soll dann später für das Handle einer "Vokabeldatenbank" zuständig sein, sodass ich beim interface nicht mehr mit sqlite beschäftigen muss. 1. private
Delphi-Quellcode:
Wo steht der Rückgabewert und lese ich diesen aus (ins result)
function TableExists(mTable: String): Boolean;
begin Q.SQL.Add('SHOW TABLE STATUS LIKE `'+mTable+'`'); Q.ExecSQL; end; 2. gleiches Problem wie bei 1. nur das ich diesmal die Zeilen einer Tablle zählen würde Q.SQL.Add('SELECT count(*) from `'+mTable+'`'); |
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Delphi-Quellcode:
function TableExists(mTable: String): Boolean;
begin Q.SQL.Add('SHOW TABLE STATUS LIKE `'+mTable+'`'); Q.Open; //wenn ein Ergebnis kommt, steht es nun auf dem ersten Datensatz, ansonsten ist EOF true while not Q.EOF do begin //soll den Wert des ersten Feldes des aktuellen Datensatzes ausgeben ShowMessage(Q.Fields[0].AsString); //nächster Datensatz Q.Next; end; Q.Close; end; |
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Wenn schon add, dann vorher löschen aber besser
Delphi-Quellcode:
Zudem würde sich die Verwendung von (SQL-)Parametern anbieten.
Q.SQL.Text := 'SHOW TABLE STATUS LIKE `'+mTable+'`';
BTW.: Ohne Grundlagenwissen (Tutorials) ist die ganze Chose ein Himmelfahrtskommando! |
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Delphi-Quellcode:
Jetzt meckert er beim Q.Open aber das er ZDbcSqLiteUtils.pas nicht findet. Ich hab auch schon nachgeschaut, ich hab zwar eine ZDbcSqLiteUtils.dcu aber keine ZDbcSqLiteUtils.pas
procedure TVocabularyBook.TableExists(mTable: String);
begin Q.SQL.Text := 'SHOW TABLE STATUS LIKE `'+mTable+'`;'; Q.Open; //wenn ein Ergebnis kommt, steht es nun auf dem ersten Datensatz, ansonsten ist EOF true while not Q.EOF do begin //soll den Wert des ersten Feldes des aktuellen Datensatzes ausgeben ShowMessage(Q.Fields[0].AsString); //nächster Datensatz Q.Next; end; Q.Close; end; Ich benutze übrigens Delphi 2010 mit zeos 7.0.0 alpha. |
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Die DCU wird dann von einer anderen Delphiversion stammen
|
Re: Hilfe bei sqlite und Zeos Komponente gesucht
nein die hab ich selbst kompiliert ...
|
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Zitat:
|
Re: Hilfe bei sqlite und Zeos Komponente gesucht
danke, behoben
Jetzt kommt der Fehler "SQL Error: SQL logic error missing database" |
Re: Hilfe bei sqlite und Zeos Komponente gesucht
was mach ich nun?
|
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Delphi-Quellcode:
Das zweite Q.Open (Zeile 7) verursacht ebenfalls den Fehler "SQL Error: SQL logic error missing database". Woran liegt das?
Q.SQL.Text := 'SELECT count(*) FROM sqlite_master WHERE name="main";';
Q.Open; if Q.Fields[0].AsInteger > 0 then begin Q.Close; Q.SQL.Text := 'SELECT v_build FROM main;'; Q.Open; if not Q.EOF then b := vBuild > Q.FieldByName('v_build').AsInteger else b := true; if b then UpdateSQL() end else begin Q.Close; Q.SQL.LoadFromFile('C:\Users\Marvin\Desktop\structure.sql'); Q.Open; end; |
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Zeig mal den Code, mit dem du die Verbindung zu SQLite aufbaust
|
Re: Hilfe bei sqlite und Zeos Komponente gesucht
wie er bereits auf Seite 1 steht ...
Delphi-Quellcode:
gCon := TZConnection.Create(nil);
with gCon do begin Protocol := 'sqlite-3'; Database := mPath; Connect; end; Q := TZQuery.Create(nil); Q.Connection := gCon; |
Re: Hilfe bei sqlite und Zeos Komponente gesucht
ja und dann sieht meine Datenbankstruktur jetzt so aus:
SQL-Code:
Ist das so erstmal richtig, hat es eine Bedeutung ob ich die Spaltenname in "" sind oder nicht?
CREATE TABLE IF NOT EXISTS "main" (
id integer PRIMARY KEY AUTOINCREMENT NOT NULL, v_major integer, v_minor integer, v_release integer, v_build integer, name varchar(63), creation_date datetime, last_training datetime, sorting integer, practice_system integer, boxes integer, asked_language integer ); CREATE TABLE IF NOT EXISTS "articles" ( id integer PRIMARY KEY AUTOINCREMENT NOT NULL, "language" integer, article varchar(31) ); CREATE TABLE IF NOT EXISTS "words" ( id integer PRIMARY KEY AUTOINCREMENT NOT NULL, "language" integer, article integer, word varchar(255), note varchar(255), chance float(10), added_on datetime, last_training datetime, trials integer, mistakes integer, box integer ); CREATE TABLE IF NOT EXISTS "lanuages" ( id integer PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(63), "case_sensitive" boolean, "control_articles" boolean, "word_count" integer, "chance_sum" float(20), "trials" integer, "mistakes" integer ); |
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Quote diese doch auch mal in der Abfrage
|
Re: Hilfe bei sqlite und Zeos Komponente gesucht
ok, danke das behebt den Fehler mit den Datenbankzugriff
Muss ich die Anführungszeichen denn immer machen bzw. müsst ich sie beim Create Tabel nicht auch um jeden Spaltenname machen? |
Re: Hilfe bei sqlite und Zeos Komponente gesucht
was genau ist der Unterschied zwischen SQL.Open und SQL.ExecSQL ?
|
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Open liefert ein Ergebnis zurück
|
Re: Hilfe bei sqlite und Zeos Komponente gesucht
|
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Er sucht halt nicht gerne selber und hat auch keine Lust auf Tutorials, in denen diese Grundlagen geklärt werden.
|
Re: Hilfe bei sqlite und Zeos Komponente gesucht
mkinzler: wenn du nicht helfen willst, halt doch bitte einfach die Klappe
Ich hab nach dem Unterschied ohne Ergebnisse gegooglt und in den Tutorials die ich gelesen habe, haben die das immer einfach verwendet ohne mal den Unterschied zu erklären |
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Zitat:
Man könnte meinen, hier hilft dir niemand, was absolut nicht so ist. Nur zeigst du deinerseits keine wirkliche Eigeninitiative. :wall: |
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Wenn mir einer noch erklären könnte wann ich was für Anführungszeichen machen muss, wär das sehr nett, weil ich auch dazu nichts in den Tutorials gefunden habe.
Muss ich jetzt Spalten- und Tabellennamen grundsätzlich in "" packen? |
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Mit SQLite kenn ich mich nicht aus, aber wenn Du bei Firebird die Feldnamen in Anführungszeichen definierst, sind diese anschließend case-sensitive, d.h. man muss auf Groß- und Kleinschreibung achten.
|
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Zitat:
|
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Jo dank euer Hilfe und ein paar weiteren Dutzend Google Suchen nimmt das ganze langsam Form an. Nun würd ich gern eine Liste von Wörtern Darstellen. Eigentlich kein Problem: Einfach SQL Abfrage und dann einfach Wörter in eine TStringList warten, die TStringlist an das main Formular übergeben und dort kann man einer TListBox einfach die TStringList übergeben und fertig. Nun hät ich aber gern das die TListBox auch zu jedem Wort die id des Wortes weiß, wobei hier die id des Wortes nicht gleich des Index in der Liste ist. Wie regel ich das am besten? Neue Klasse die von TStringList ableitet und für jede Zeile noch ne id hat?
|
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Nimm eine TlistView. Dann kannst du die ID oder einen Pointer auf eine Datenstruktur mit weiteren Angaben in der Eigenschaft .Data packen
|
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Alternativ kannst Du Dir auch eine Klasse deklarieren, die die ID enthält und die Du mit AddObject zu jedem TStrings-Objekt hinzufügen kannst.
|
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Ok, ich denk ich nehm mal die TListView, das was ich dazu gefunden habe hört sich gut an. Also so wie ich das bis jetzt verstanden habe kann man da einfach Items reinhauen und die ein solche Itemklasse müsste man jetzt selbst schreiben. Aber dafür finde ich irgendwie kein Beispiel :(
|
Re: Hilfe bei sqlite und Zeos Komponente gesucht
Brauchst du eigentlich nicht. Man kann auch die vorhandene nehmen. Diese hat eine Data-Eigenschaft, in diese man auch direkt ein Integer (ID) schreiben kann
|
Re: Hilfe bei sqlite und Zeos Komponente gesucht
ok, könntest du mal ein Beispielcode posten? Also ich hät nen String und zu jedem String gehört ne id ...
Ach ja und wie mach ich das wenn ich ganze viele Einträge habe, da kann man dann ja so mit Begin und Ende Update trixen damit nicht alle auf einmal geladen werden. Da müsst ich ja eigentlich jedesmal wenn der Nutzer scrollt ne neue Datenbankabfrage machen und nur den Teil ausgeben oder? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz