AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Zeos Sqlite probleme beim erstellen von Einträgen
Thema durchsuchen
Ansicht
Themen-Optionen

Zeos Sqlite probleme beim erstellen von Einträgen

Ein Thema von Blamaster · begonnen am 15. Mai 2011 · letzter Beitrag vom 15. Mai 2011
Antwort Antwort
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#1

Zeos Sqlite probleme beim erstellen von Einträgen

  Alt 15. Mai 2011, 15:33
Datenbank: Sqlite • Version: 3 • Zugriff über: D7
Hi,

ich versuche gerade mich ein wenig in Datenbanken einzuarbeiten.

Ich habe folgenden Code erstellt:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  with ZCon do
  begin
    Protocol := 'sqlite-3';
    Database := 'bla.sql';
    Connect;
  end;
  Zqry.Connection := ZCon;

  try
    Zqry.SQL.Text := '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' + ');';
    Zqry.ExecSql;
  finally
    ZCon.Connected := false;
  end;

end;

procedure TForm1.btn1Click(Sender: TObject);
begin
  try
    ZCon.Connected := true;

    Zqry.SQL.Text := 'INSERT INTO `product` ' +
      '(`id`, `producer`, `name`, `category`, `wohnort`, `size`)' +
      ' VALUES ' +
      '('''', ''' + 'bla' + ''', ''' + 'blub' +
      ''', ''' + 'lol' + ''', ''' + 'ort' +
      ''', ''' + '31139' + ''');';

    Zqry.ExecSql; //SQL-Statement ausführen
  finally
    ZCon.Connected := False; //Verbindung trennen
  end;
end;
Leider kommt es beim btn1Click zu folgendem Fehler:

---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EZSQLException with message 'SQL Error: datatype mismatch'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

Welcher Datentyp passt denn dort nicht ?

Gruß Yannic
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Zeos Sqlite probleme beim erstellen von Einträgen

  Alt 15. Mai 2011, 15:56
id füllst Du mit einem Leerstring. Aber als INTEGER Autoincrement definiert, also NULL oder garnichts angeben
Delphi-Quellcode:
' VALUES ' +
'(NULL, ''' +
Würde aber 1) mit Parametern arbeiten (die QuoteOrgie ist ja schrecklich) oder wenigstens mit QuotedStr()
und 2) auf CaseSensitive Tabellen/Feldnamen verzichten


Delphi-Quellcode:
  try
    Zqry.SQL.Text := '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' + ');';
    Zqry.ExecSql;

[...]

    Zqry.SQL.Text := 'INSERT INTO product ' +
      '(id, producer, name, category, wohnort, size)' +
      ' VALUES(NULL, :producer, :name, :category, :wohnort, :size);';

    ZQry.ParamByName('producer').AsString := 'Firma GmbH';
    ZQry.ParamByName('name').AsString := 'Max Mustermann';
    ZQry.ParamByName('category').AsString := 'Software-Entwicklung';
    ZQry.ParamByName('wohnort').AsString := '10000 Berlin';
    ZQry.ParamByName('size').AsInteger := 4711;


    Zqry.ExecSql; //SQL-Statement ausführen
Den Vorteil von Parametern solltest Du sehen. Zusätzlich kannst den Code universell umbauen

Delphi-Quellcode:
procedure MyInsert(producer, name, category, wohnort: String; size : Integer);
begin
[...]
    Zqry.SQL.Text := 'INSERT INTO product ' +
      '(id, producer, name, category, wohnort, size)' +
      ' VALUES(NULL, :producer, :name, :category, :wohnort, :size);';

    ZQry.ParamByName('producer').AsString := producer;
    ZQry.ParamByName('name').AsString := name;
    ZQry.ParamByName('category').AsString := category;
    ZQry.ParamByName('wohnort').AsString := wohnort;
    ZQry.ParamByName('size').AsInteger := size;
[...]
end;
Dann denk' nochmal über Dein Denglish nach

Innerhalb Delphi Bezeichner und CO am liebsten in Englisch. Tabelle/FeldName darf aber Deutsch sein (seltener Namenskonflikte). Nur dann bitte ganz in deutsch: Produzent, Name, Kategorie, Wohnort, Groesse

PS: Name ist schon so ein ungünstigstes Wort... nehme da gerne Firmenname, Vorname, Nachname oder was passt, dann umgeht man einen evtl. Konflikt mit dem englischen name, das schon oft als Bezeicher genommen wird..

Geändert von Satty67 (15. Mai 2011 um 16:19 Uhr)
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#3

AW: Zeos Sqlite probleme beim erstellen von Einträgen

  Alt 15. Mai 2011, 17:30
Hi,

vielen Dank

Mit den Parametern klappt das echt super

Die Namen waren nur schnell belibig hingeschmiert um überhaupt erstmal die Funktionsweise zu testen

Ein kleines Problem habe ich nun aber noch.

Ich habe jetzt mal versucht die Einträge aus der Datenbank in eine ListView einzutragen.

Klappt soweit auch ganz gut, allerdings möchte ich nun noch ein Suchkreterium einbauen. In Access ging das immer mit Wie *Mustermann*. So wurden nun alle Namen gelistet in den Mustermann vorkommt.

Ich habe es nun so versucht:

Delphi-Quellcode:
  try
    ZCon.Connected := true;

    Zqry.SQL.Text := 'SELECT * FROM product WHERE producer = *mustermann* ORDER BY producer';
    Zqry.Open;

    while not Zqry.Eof do
    begin
      Item := lv1.Items.Add;
      Item.Caption := Zqry.FieldByName('id').AsString;
      Item.SubItems.Add(Zqry.FieldByName('category').AsString);
      Item.SubItems.Add(Zqry.FieldByName('producer').AsString);
      Item.SubItems.Add(Zqry.FieldByName('product').AsString);
      Item.SubItems.Add(Zqry.FieldByName('size').AsString);
      Item.Data := Pointer(Zqry.FieldByName('id').AsInteger);
      Zqry.Next;
    end;

  finally
    Zqry.Close;
    ZCon.Connected := false;
  end;
Wie muss der Syntax korrekt lauten ?

Gruß Yannic
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#4

AW: Zeos Sqlite probleme beim erstellen von Einträgen

  Alt 15. Mai 2011, 20:05
Hat sich erledigt

Trotzdem Danke
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Zeos Sqlite probleme beim erstellen von Einträgen

  Alt 15. Mai 2011, 20:08
andere Frage anderer Thread usw...

Also WHERE producer LIKE '%mustermann%' müsste gehen, wobei ich grad nicht 100% sicher bin, ob % am Anfang korrekt ist.

Syntax zu SQlite ist bei www.sqlite.org zu finden, die Site kann man auch lokal speichern und immer schnell drauf zugreifen.

€: Das "hat sich erledig" musst Du geschrieben haben, als ich im Editor war?
  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 20: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