AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SQLConnect ist erforderlich!
Thema durchsuchen
Ansicht
Themen-Optionen

SQLConnect ist erforderlich!

Ein Thema von EdAdvokat · begonnen am 7. Apr 2017 · letzter Beitrag vom 9. Apr 2017
Antwort Antwort
Seite 1 von 2  1 2      
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

SQLConnect ist erforderlich!

  Alt 7. Apr 2017, 19:46
Datenbank: SQLite-3 • Version: 3 • Zugriff über: SQLConnect
Hallo zusammen, ich bin in Fragen Datenbanken noch ein Greenhorn und brauche Hife.
Ich experimentiere mit einer SQLite-Datenbank und habe das Experimentalprogramm bereits in einer Version mit den Zeos-Komponenten unter Delphi 10.1 zum laufen gebracht. Nun unter Delphi 10.2 Tokio gibt es die Zeos-Komponenten noch nicht bzw. ich traue mich nicht sie zu installien. Eigentlich wollte ich mit den Mitteln von Delphi, also mit TSQLConnection und SQLQuery die Sache angehen, doch ich stecke mit nachfolgender Meldung fest:
Fehlermeldung: Für diese Operation ist die Eigenschaft SQLConnection erforderlich.
Nun habe ich doch SQLConnection verwendet. Was mache ich falsch. Das Programm läßt sich kompilieren, doch sofort kommt die Fehlermeldung. Ein Connect mit der Datenbank per Button "connect" wird hingegen positiv beantwortet.
Ich bin noch relativ neu in Fragen Datenbanken und will mich einfach weiterbilden. Hoffentlich ist das ganze nicht völliger Blödsinn. Auf jedem Fall ist es ein Experimentalstadium nur zum Test, wie man es machen könnte.
Für Anregungen, was da falsch läuft wäre ich daher sehr dankbar. Datenbank liegt bei.
Norbert
Angehängte Dateien
Dateityp: zip Waren3.zip (405,9 KB, 7x aufgerufen)
Norbert
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.387 Beiträge
 
Delphi 12 Athens
 
#2

AW: SQLConnect ist erforderlich!

  Alt 7. Apr 2017, 20:10
Moin...
Zitat:
in einer Version mit den Zeos-Komponenten unter Delphi 10.1 zum laufen gebracht.
...du braucht nicht sofort das aktuellste Tokio. Ich denke mit Zeos bist du besser dran als mit DBX. Viel handlicher... Es ist einfach gesagt: Gehe wieder auf Berlin zurück...

In sofern kann ich dir helfen den QT, ohne Funktionsprüfung, mal durchzukorrigieren.
...dauert einen Moment...bis Morgen früh.
  Mit Zitat antworten Zitat
frapo

Registriert seit: 8. Feb 2012
Ort: OWL
32 Beiträge
 
Delphi 10.1 Berlin Starter
 
#3

AW: SQLConnect ist erforderlich!

  Alt 7. Apr 2017, 20:11
Hallo zusammen, ich bin in Fragen Datenbanken noch ein Greenhorn und brauche Hife.
Ich experimentiere mit einer SQLite-Datenbank und habe das Experimentalprogramm bereits in einer Version mit den Zeos-Komponenten unter Delphi 10.1 zum laufen gebracht. Nun unter Delphi 10.2 Tokio gibt es die Zeos-Komponenten noch nicht bzw. ich traue mich nicht sie zu installien...
Norbert
Hast du mal unter Google nachgeschaut? z.b. mit den Suchbegriffen "delphi zeos sqlite tutorial"? ZEOS kommt ja nicht von Embarcadero, sondern ist frei. Bei mir klappte auch die Installation der Komponenten unter Tokyo Starter. Das ist keine Hexenkunst .
Zum Thema trauen, du kannst nicht wirklich was kaputt machen! Wenn es nicht klappen sollte.. wird nicht anderes passieren, außer das es nicht klappen könnte . Lesen, Verstehen, anwenden(versuchen).. mehr ist nicht zu tun
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: SQLConnect ist erforderlich!

  Alt 8. Apr 2017, 07:41
Hallo,
ist Active auf True gesetzt?
Dann wird bereits im FormCreate versucht,
eine Verbindung zur DB herzustellen.

Dort stehen wohl noch nicht alle Infos zur Verfügung?
Heiko

Geändert von hoika ( 8. Apr 2017 um 07:43 Uhr)
  Mit Zitat antworten Zitat
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: SQLConnect ist erforderlich!

  Alt 8. Apr 2017, 08:11
Im Objectinspektor ist active auf false. Im Quelltext wird
con.Connected:=true; nach Bestimmung der Datenbank und des Treibers gesetzt. Nun habe ich an dieser Stelle connected auskommentiert und nur mit dem Button connect gestartet, aber die gleiche Fehlermeldung. Ich kenne keine weitere Stellschraube, um das Problem zu beheben.
Norbert
Norbert
  Mit Zitat antworten Zitat
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: SQLConnect ist erforderlich!

  Alt 8. Apr 2017, 08:23
Habe soeben den Fehler gefunden. Es gab doch noch eine Stellschraube. Im Objectinspektor habe ich versehentlich SQL Connection falsch eingestellt. Jetzt funktioniert es erst einmal. Doch wäre ich auch dankbar für Hinweise und Kritiken zum Text selbst. Denn mein eigentliches Ziel ist es, nach einer gesonderten Berechnung zB. des Preises bzw. von Rabatten oder was auch immer, dann dieses Ergebnis einem Datenbankfeld oder einer Tabelle zu übergeben, damit es nach einer neuen Verbindung zur Datenbanktabelle wieder zur Verfügung steht. Damit tue ich mich noch schwer. Es reicht ein Feld. Dann könnte ich diese Lösung auf weitere übertragen.
Nun merke ich gerade, dass meine Daten im Listview teilweise mit chinesischen/japanischen Zeichen (vermutlich ein unicode-Problem) ausgegeben werden. Gibt es dafür eine Einstellung oder muß ich das Listview ganz und gar verdammen?
Norbert
Norbert

Geändert von EdAdvokat ( 8. Apr 2017 um 08:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.387 Beiträge
 
Delphi 12 Athens
 
#7

AW: SQLConnect ist erforderlich!

  Alt 8. Apr 2017, 10:40
Moin...
Du hast es so gewollt...
Ohne Gewähr auf Vollständigkeit. Vergleiche das Original mit, dem Comparer deiner Wahl, dem hier...
Ansonsten benutze einen Codeformatter und die Codevervollständigung... da passieren weniger Tippfehler. (false statt False)
Delphi-Quellcode:
unit uMainWarenVK;

interface

uses
  Winapi.Windows, Winapi.Messages,
  System.SysUtils, System.Variants, System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.Grids, Vcl.DBGrids, Vcl.ExtCtrls, Vcl.DBCtrls, // XPManager nicht mehr notwendig!
  Data.DB, system.UITypes, Data.DbxSqlite, Data.FMTBcd, Data.SqlExpr;

type
  // !!! vernüftige Namen für die Controls oder Parameter, bei Controls mit Präfix für den Typ, vorzugsweise englisch und mit CamelCase...Denglisch sieht doof aus. :-) (BearbeitenClick)
  TMainFrm = class(TForm)
    // besser
    lvProductList: TListView;
    // Die Caption kannst du, unabhängig vom Namen, separat ändern!
    btnClose: TButton;
    // besser
    edtCustomerNumber: TEdit;
    Name: TEdit;
    Vorname: TEdit;
    Firma: TEdit;
    Produkt: TEdit;
    Anzahl: TEdit;
    Preis: TEdit;
    // besser, sagt was über den Inhalt aus
    mmoComment: TMemo;
    Neu: TButton;
    Bearbeiten: TButton;
    Uebernehmen: TButton;
    Abbruch: TButton;
    loeschen: TButton;
    // Auch auf die Form gelegte Komponenten sollen vernüftige Namen haben und nicht die Blubb1...
    qryMain: TSQLQuery;
    connectButton: TButton;
    executebutton: TButton;
    outputMemo: TMemo;
    // besser
    conMain: TSQLConnection;
    procedure btnCloseClick(Sender: TObject);
    procedure AbbruchClick(Sender: TObject);
    procedure BearbeitenClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure lvProductListClick(Sender: TObject);
    procedure loeschenClick(Sender: TObject);
    procedure NeuClick(Sender: TObject);
    procedure UebernehmenClick(Sender: TObject);
    procedure connectButtonClick(Sender: TObject);
    procedure executebuttonClick(Sender: TObject);
  private
    // Flags gehören nicht in die public Sichtbarkeit weil nicht von außen benutzt
    // Name besser
    IsEdit: boolean;
    procedure ClearAllFields;
    procedure RefreshItems(ID, KDNr, Name, Vorname, Firma, Produkt, Anzahl, Preis: string);
  public

  end;

var
  MainFrm: TMainFrm;

implementation

{$R *.dfm}

procedure TMainFrm.AbbruchClick(Sender: TObject);
begin
  IsEdit := False;
  uebernehmen.Enabled := False;
  Abbruch.Enabled := False;
  lvProductList.SetFocus;
end;
//------------------------------------------------------------------------------ // laß das weg. Macht den Code imho schlechter lesbar. Es gibt bessere !Abgrenzungen.
procedure TMainFrm.BearbeitenClick(Sender: TObject);
begin
  IsEdit := True;
  uebernehmen.Enabled := true;
  abbruch.Enabled := true;
end;

procedure TMainFrm.connectButtonClick(Sender: TObject);
begin
  try
    // Establish the connection. // !!! Kommentare nur wenn sie wirklich was über die "Funktion" aussagen...hier nicht
    conMain.Connected := True;
    executeButton.Enabled := True;
    showMessage('Connection erfolgreich!'); // später die Texte in Konstanten verlagern, wenn du die Texte mehrfach verwenden und nur einmal ändern willst.
  except
    on E: EDatabaseError do
      ShowMessage('Fehlermeldungstext connection:' + E.Message);
  end;
end;

procedure TMainFrm.ClearAllFields; //Initialiserung // !!! zur Methode des Formulars machen.
begin
  // auch wenn es geht... *würg*
  // with MainFrm do ... obsolet mit der Verlagerung der Prozedure in pivate
    edtCustomerNumber.Clear;
    Name.Clear; // Name "Name" ist schlecht
    vorname.Clear;
    Firma.Clear;
    Produkt.Clear;
    Anzahl.Clear;
    Preis.Clear;
    mmoComment.Lines.Clear;
    name.SetFocus;
end;


procedure TMainFrm.RefreshItems(ID, KDNr, Name, Vorname, Firma, Produkt, Anzahl, Preis: string); // !!! zur Methode des Formulars machen.
// Name besser. Paßt nun mit dem Inhalt der proedure zusammen.
var
  Item: TListItem;
begin
  Item := lvProductList.Items.Add; // durch die Verlagerung ins Formular kannst du direkt darauf zugreifen.
  Item.Caption := ID;
  Item.SubItems.Add(kdnr);
  Item.SubItems.Add(Name);
  Item.SubItems.Add(Vorname);
  Item.SubItems.Add(Firma);
  Item.SubItems.Add(Produkt);
  Item.SubItems.Add(Anzahl);
  Item.SubItems.Add(Preis);
end;

procedure TMainFrm.btnCloseClick(Sender: TObject);
begin
  Close;
end;

procedure TMainFrm.executebuttonClick(Sender: TObject);
begin
  outputMemo.ClearSelection;
  try
    qryMain.SQL.Text := 'SELECT * FROM WARENVERKAUF';
    qryMain.Open; // besser
    // Active wird automatisch gesetzt
  except
    on E: Exception do
      outputMemo.text := 'Fehlermeldungstext execute: ' + E.Message;
  end;
end;

procedure TMainFrm.FormCreate(Sender: TObject);
begin
  conMain.LibraryName := ExtractFilePath(Application.ExeName) + 'sqlite3.dll';
  conMain.Params.Add('DataBase=' + ExtractFilePath(Application.ExeName) + 'WarenVK.sqlite'); // !!! keine hardcodierte Pfade verwenden
  conMain.Connected := True;
  qryMain.SQL.Clear;
  qryMain.Params.Clear;
  qryMain.SQL.Text := 'SELECT ID,KDNR,NAME,VORNAME,FIRMA,PRODUKT,ANZAHL,PREIS FROM WARENVERKAUF'; // Ich bevorzuge bei SQL immer die Großschreibung. Da grenzt sich das SQL von normalen Texten ab...kannst halten wie es willst...aber dann konsequent!
  qryMain.Open;
  while not qryMain.Eof do
  begin
    RefreshItems(qryMain.FieldByName('ID').AsString,
                 qryMain.FieldByName('KDNR').AsString,
                 qryMain.FieldByName('NAME').AsString, // Feldname "NAME" kann in die Hose gehen...reserviertes Wort.
                 qryMain.FieldByName('VORNAME').AsString,
                 qryMain.FieldByName('FIRMA').AsString,
                 qryMain.FieldByName('PRODUKT').AsString,
                 qryMain.FieldByName('ANZAHL').Asstring,
                 qryMain.FieldByName('PREIS').Asstring);
    qryMain.Next;
  end;
  qryMain.Close;
  IsEdit := False;
end;

procedure TMainFrm.lvProductListClick(Sender: TObject);
var
  CurrentCustomerID: string; // Name besser...eindeutiger
begin
  if lvProductList.SelCount >= 1 then
  begin
    CurrentCustomerID := lvProductList.Selected.Caption;
    qryMain.SQL.Clear;
    qryMain.Params.Clear;
    qryMain.SQL.Text := 'SELECT * FROM WARENVERKAUF WHERE ID = :CID';
    qryMain.ParamByName('CID').AsString := CurrentCustomerID; // besser Parameter
    qryMain.Open;

    edtCustomerNumber.Text := qryMain.FieldByName('KDNR').AsString;
    name.Text := qryMain.FieldByName('NAME').AsString;
    vorname.Text := qryMain.FieldByName('VORNAME').AsString;
    firma.Text := qryMain.FieldByName('FIRMA').AsString;
    Produkt.Text := qryMain.FieldByName('PRODUKT').AsString;
    Anzahl.Text := qryMain.FieldByName('ANZAHL').Asstring;
    Preis.Text := qryMain.FieldByName('PREIS').Asstring;
    mmoComment.Lines.Clear;
    mmoComment.Lines.Add(qryMain.FieldByName('MEMO').AsString);
    qryMain.Close;
  end;
end;

procedure TMainFrm.loeschenClick(Sender: TObject);
var
  CurrentCustomerID: string; // Zeichen sind nicht mehr Mangelware
begin
  if lvProductList.SelCount >= 1 then
  begin
    if MessageDlg('Sind Sie sicher, dass Sie den Datensatz löschen wollen?', mtconfirmation, [mbyes, mbno], 0) = mrYes then
    begin
      CurrentCustomerID := lvProductList.Selected.Caption;
      qryMain.SQL.Clear;
      qryMain.Params.Clear;
      qryMain.SQL.Text := 'DELETE FROM WARENVERKAUF WHERE ID = :CID';
      qryMain.ParamByName('CID').AsString := CurrentCustomerID;
      qryMain.ExecSQL; // hier ist es richtig...gibt keine Datenmenge zurück
      lvProductList.Selected.Delete;
    end;
  end;
end;

procedure TMainFrm.NeuClick(Sender: TObject);
begin
  ClearAllFields;
  uebernehmen.Enabled := True;
  abbruch.Enabled := True;
  IsEdit := False;
end;

procedure TMainFrm.UebernehmenClick(Sender: TObject);
var
  CurrentCustomerID: string; // Zeichen sind nicht mehr Mangelware
begin
  qryMain.SQL.Clear;
  qryMain.Params.Clear;
  //Parameter anlegen... passiert automatisch
  if IsEdit then // niemals auf True prüfen
  begin
    CurrentCustomerID := lvProductList.Selected.Caption;
    qryMain.SQL.Text := 'UPDATE WARENVERKAUF SET KDNR=:KDNR,NAME=:NAME,VORNAME=:VORNAME,FIRMA=:FIRMA,PRODUKT=:PRODUKT,ANZAHL=:ANZAHL,PREIS=:PREIS,MEMO=:MEMO WHERE ID = :CID';
    qryMain.ParamByName('CID').AsString := CurrentCustomerID;
    // Namensgebung der Parameter verbesserungswürdig...schlechte Unterscheidung Feldname und Parameter
    qryMain.ParamByName('KDNR').Text := edtCustomerNumber.Text;
    qryMain.ParamByName('NAME').Text := Name.Text;
    qryMain.ParamByName('VORNAME').Text := vorname.Text;
    qryMain.ParamByName('FIRMA').Text := firma.Text;
    qryMain.ParamByName('PRODUKT').Text := produkt.Text;
    qryMain.ParamByName('ANZAHL').Text := Anzahl.Text;
    qryMain.ParamByName('PREIS').Text := preis.Text;
    qryMain.ParamByName('MEMO').Text := mmoComment.Lines.Text;
    qryMain.ExecSQL;

    // Wiederverwendbarkeit
    RefreshItems(CurrentCustomerID, edtCustomerNumber.Text, Name.Text, vorname.Text, firma.Text, produkt.Text, Anzahl.Text, Preis.Text);
  end
  else
  begin
    qryMain.SQL.Text := 'INSERT INTO WARENVERKAUF(KDNR,NAME,VORNAME,FIRMA,PRODUKT,ANZAHL,PREIS,MEMO) VALUES (:KDNR,:NAME,:VORNAME,:FIRMA,:PRODUKT,:ANZAHL,:PREIS,:MEMO)';
    qryMain.ExecSQL;
    //LastID
    qryMain.SQL.Clear;
    qryMain.Params.Clear;
    qryMain.SQL.Text := 'SELECT LAST_INSERT_ROWID() AS ID FORM WARENVERKAUF';
    qryMain.Open;
    CurrentCustomerID := qryMain.FieldByName('ID').AsString;
    qryMain.Close;
    // Wiederverwendbarkeit
    RefreshItems(CurrentCustomerID, edtCustomerNumber.Text, Name.Text, vorname.Text, firma.Text, produkt.Text, Anzahl.Text, Preis.Text);
  end;
  IsEdit := False;
  uebernehmen.Enabled := False;
  abbruch.Enabled := False;
  lvProductList.SetFocus;
end;

end.
Angehängte Dateien
Dateityp: zip Test.zip (1,58 MB, 7x aufgerufen)

Geändert von haentschman ( 8. Apr 2017 um 13:34 Uhr)
  Mit Zitat antworten Zitat
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: SQLConnect ist erforderlich!

  Alt 8. Apr 2017, 11:37
Ich danke dir für die Hinweise und Korrekturen und werde mir das alles genau einziehen. In deiner Version sind wundersam auch die bei mir aufgetretenen unicode-Probleme nicht mehr festzustellen. Woran lag das wohl? Jedenfalls erhalte ich jetzt alle Namen in deutscher Sprache. Wenn ich zu einzelnen Punkten deiner Hinweise nochmals Fragen habe, melde ich mich. Noch immer bin ich daran interessiert, eine Beispiellösung dazu zu erhalten, wie man das Ergebnis einer gesonderten Berechnung zB. a+b jeweils in TEdits dann in das Datenbankfeld übernimmt. Habe es mit einer Zuweisung DBEdit:=edit1.text... versucht, doch da stört ihn das die Datenbank nicht geöffnet sei... Wie macht man sowas richtig????
Erst einmal vielen Dank und ich werde wieder studieren
Norbert
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.387 Beiträge
 
Delphi 12 Athens
 
#9

AW: SQLConnect ist erforderlich!

  Alt 8. Apr 2017, 14:10
Moin...
Zitat:
Ich danke dir für die Hinweise und Korrekturen und werde mir das alles genau einziehen.
...das werde ich in deinem nächsten Quelltext überprüfen. ...
Zitat:
In deiner Version sind wundersam auch die bei mir aufgetretenen unicode-Probleme nicht mehr festzustellen. Woran lag das wohl?
...an den denglischen Komponentenbezeichnern? ...keine Ahnung.
Zitat:
Wie macht man sowas richtig????
1. !!! Jeder Datensatz hat eine ID für die Eideutigkeit. Die muß man nicht immer auslesen...aber gehört angelegt. (Stichwort: AutoInc oder Trigger)https://www.tutorialspoint.com/sqlit...oincrement.htm
2. In der Datenbank die Felder mit vernüftigen Namen anlegen. (Stichwort: reservierte Wörter, Präfix für Tabellennamen und Feldnamen...da hast du das Problem nicht (z.B. F_CUSTOMER_NAME))
3. In der Datenbank die Felder mit den zu speicherenden Datenbanktypen anlegen. (nicht nur string)
4. Normalisierung der Datentabellen https://de.wikipedia.org/wiki/Normal...ng_(Datenbank)
Zitat:
wie man das Ergebnis einer gesonderten Berechnung zB. a+b jeweils in TEdits dann in das Datenbankfeld übernimmt.
...grundsätzlich wie bei allen Datenbankmanipulationen:
Delphi-Quellcode:
Query.SQl.Text := 'UPDATE xxxxx (F_SUM) VALUES (:SUM) WHERE F_BLUBB = :MID'; // F_SUM muß bestehen
Query.ParamByName(MID).AsInteger := FMyID;
Query.ParamByName(SUM).AsFloat := StrToFloat(edtLinks.Text) + StrToFloat(edtRichts.Text); // !!! Mit den Edits zu rechnen ist schlechter Stil. Besser: Die Eingaben auf Gültigkeit prüfen, zusammenrechnen und in einer Variablen "zwischenspeichern". Dann erst das Ergebnis dem SQL übergeben.
Query.ExecSQL;
...besser mit dem Datensatz komplett speichern.

Dazu kommt noch die Prüfung auf Gültigkeit der eingegebenen Werte dazu. Siehe: http://docwiki.embarcadero.com/Libra....TryStrToFloat

...wer hat den gesagt das Programmieren langweilig ist.

Geändert von haentschman ( 8. Apr 2017 um 14:40 Uhr)
  Mit Zitat antworten Zitat
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: SQLConnect ist erforderlich!

  Alt 8. Apr 2017, 21:25
Hallo Haenschmann, vielen vieln Dank für Deine Hilfe für mich alten Zausel. Ich werde mir all das ganz in Ruhe durchsehen und nachvollziehen. Natürlich ist es wichtig, die richtige Syntax zu wählen und ich werde mich natürlich noch mehr bemühen, dies zu beherzigen. Das Programmchen war jedoch ein Experimentalentwurf. Was das unicode-Problem angeht glaube ich den Übeltäter eingegrenzt zu haben. Du hast den Inhalt der Methode "übernehmen" völlig anders angelegt und vermutlich sind die ftString das Problem. Egal jetzt funktioniert es.
Nun einige Fragen: 1. Ist der connect-Button mit der Methode überhaupt nötig, wenn doch ohnehin beim Aufruf des Programms die Verbindung zur Datenbank hergestellt wird.
2. ist ebenso der execute-Button mit der Methode nötig, da ohnehin alles bereits läuft?
3. Du schreibst, dass an gleicher Stelle das ein active Setzen nicht notwenig sei, das dies automatisch geschieht:
Delphi-Quellcode:
qryMain.SQL.Text := 'SELECT * FROM WARENVERKAUF';
    qryMain.Open; // besser
    // Active wird automatisch gesetzt
Wieso und wo wird es automatisch auf active gesetzt? In FormCreate mit:
Delphi-Quellcode:
conMain.Connected := True;
  qryMain.SQL.Clear;
?
Sicher ergeben sich noch einige weitere Fragen, denn ich bin erst vor gut 30 Min. nach Hause gekommen und wollte unbedingt gleich antworten und nochmals meinen Dank für Deine Bemühungen aussprechen. Ich habe mir all das im Selbstudium, aus Büchern (leider schon gut 10-15 Jahre alt) Youtube-Videos und anderen Tutorials angeeignet. So schleichen sich natürlich auch einige Unsauberkeiten ein. Ich war jedoch froh, dass ein Andreas Hiller eine Folge von Beispieltutorials in Fragen SQLite-Datenbank Anwendungen vorgetragen hat.
Ich habe so glaube ich mit Deinen Hinweisen wieder einen großen Schritt nach vorn gemacht.
Norbert
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:40 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