Sql Query und Dbf

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Jochim
Beiträge: 32
Registriert: Mi 20. Mär 2013, 13:44
OS, Lazarus, FPC: Win7 HP x64
CPU-Target: Bit

Re: Sql Query und Dbf

Beitrag von Jochim »

hde hat geschrieben: 9.DB erzeugen --> wie erzeuge ich dann, mit welcher Komponente oder Kode die DB?
9.Createstatement in ZQery1.SQL eintragen
10.Zquery Active setzen // nein
10a.Zur Laufzeit: ZQuery1.ExecSQL
Ich habetrotzdem noch ein Problem bei CREATE TABLE.
Ich habe nun in die ZQuery.SQL die create Prozedur geschrieben:

Code: Alles auswählen

CREATE TABLE IF NOT EXISTS product (
      id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
      producer TEXT NOT NULL,
      name TEXT NOT NULL,
      category TEXT NOT NULL,
      wohnort TEXT NOT NULL,
      size INTEGER NOT NULL ) ;
 
Und auch alles miteinander verbunden und dann in der FormCreate das gemacht, was zur Laufzeit erledigt werden sollte:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
    Zconnection.Connect;
    ZQuery.ExecSql;
    Zquery.Active:=True;
end;
Doch nun, wenn ich das Programm starte kann ich zwar anscheinen etwas schreiben, aber die Table wird nicht im DBGrid angezeigt und ich kann nichts eintippen. ist an meiner CREATE Prozedur etwas falsch? muss ich dort noch etwas benennen?

Jochim

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Sql Query und Dbf

Beitrag von hde »

create erzeugt die Table,
wenn das geschehen ist muss das select folgen.
also nach ZQuery1.execSQL
ZQuery1.SQL.Clear;
ZQuery1.SQL.Add('select .. ');
und dann
ZQuery1.Active:=true;

Soner
Beiträge: 725
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Sql Query und Dbf

Beitrag von Soner »

Um Tabelle zu erstellen benutze einfach temporär zweite TZQuery:

Code: Alles auswählen

 
//....
 
procedure TForm1.FormCreate(Sender: TObject);    
var Q2 : TZQuery;
begin
  //Du hast schon alles vorbereitet deine punkte oben 1..8
  //Deine ZQuery1 mit "Select * from product" und verbunden mit DataSource1, muss noch "false" bleiben
  // sonst gibt"s Tabelle nicht vorhanden Fehler
 
  ZConnection1.Connected:=true
 
  //Temporäre Query erzeugen
  Q2:=TZQuery.Create;
  Q2.Connection:=ZConnection1;
 
  //Tabelle erzeugen 
  Q2.Sql.Clear;
  Q2.Sql.Add(' CREATE TABLE IF NOT EXISTS product (  '+
      'id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, '+
      'producer TEXT NOT NULL, '+
      'name TEXT NOT NULL, '+
      'category TEXT NOT NULL, '+
      'wohnort TEXT NOT NULL,  '+
      'size INTEGER NOT NULL ) ; ');
  Q2.ExecSQL;  //Tabelle erstellt.
 
  // Wenn du mehrere Tabellen erstellen willst :
  // Q2.Close;
  // Q2.Sql.Clear;  .... und weiter wie gehabt
 
  Q2.Free;       // Q2 freigeben weil du es nicht mehr brauchst.
 
  zQuery1.Active:=true;  //jetzt kannst du dein Tabelle zum benutzen öffnen
end;
 
Nachtrag:
Was auch einfach ist das ganze kannst du im Formular Designer machen. Ich habe auf dem Formulardesigner eichfach 2. Query plaziert Connection-Eigenschaft mit Zconnection1 verbunden und in SQL-Eigenschaft dein Sql-Statement von oben eingegben dann ist die Tabelle erzeugt worden. Das ist besonders gut wenn man z.b. im DBGrid-Spalten formatieren will. Ohne Tabelle kann man nichts formatieren.

Soner
Beiträge: 725
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Sql Query und Dbf

Beitrag von Soner »

Ich kann dir empfehlen deine Datenbank nicht im Programm sondern schon vorher mit DB-Tools zu erstellen. Ohne existierende Tabellen und Datenfelder machen die Datenbankkomponenten (DBGrid, DBEdit...) wenig sinn. Den sie verlangen ein Datenfeldname.
Die Stärke von Lazarus/Delphi gegeüber andere Programmiersysteme liegt ja hier; mit wenig Codezeilen gute Datenbankprogramme erstellen.

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Sql Query und Dbf

Beitrag von MmVisual »

Soner hat geschrieben:Ich kann dir empfehlen deine Datenbank nicht im Programm sondern schon vorher mit DB-Tools zu erstellen.
Nein eben nicht. Am besten das Create Table mit in die EXE nehmen, damit wird immer die DB automatisch richtig erstellt und der Installationsaufwand ist kleiner. Ich habe damit sehr gute Erfahrungen gemacht. Ja sogar nehme ich den SQLite Create Code und parse den automatisch um für MySQL/PostgreSQL/MsSQL und das klappt sehr gut.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Antworten