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
Benutzerbild von haentschman
haentschman

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

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
 
#2

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
Benutzerbild von haentschman
haentschman

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

AW: SQLConnect ist erforderlich!

  Alt 9. Apr 2017, 08:05
Moin...
Zitat:
natürlich noch mehr bemühen, dies zu beherzigen.
...laß doch andere für dich arbeiten. Haufenweise Tools nehmen dir die Strafarbeit ab. Im CnPack gibt es Tools die nicht mehr missen möchte...andere braucht jemand anders. (siehe Bild)
1. Codevervollständigung (besser als die eingebaute)
2. SourceHighlight Erweiterung (die bunten Striche) Da sieht man sofort in welcher "Ebene" man ist.
3. Cleaner
4. CodeFormatter
...usw.
Zitat:
Ist der connect-Button mit der Methode überhaupt nötig, wenn doch ohnehin beim Aufruf des Programms die Verbindung zur Datenbank hergestellt wird.
...nein. Das Datenbank Connect passiert im "Hintergrund". Der User muß nicht darauf achten ob eine Verbindung besteht. Das Programm muß selbst prüfen ob eine Verbindung besteht und sie ggf. herstellen.
Zitat:
ist ebenso der execute-Button mit der Methode nötig, da ohnehin alles bereits läuft?
...nein/ja. Als Außenstehender kann man nicht wissen wie es funtionieren soll. "Execute" würde ich zu "Speichern" umbenennen... Mache dir mal einen Plan, auf Papier , was in welcher Situation an Buttons aktiv ist und welche "Aufgaben" erledigt werden sollen. Das Programm selbst, wie du es bereits gemacht hast , sollte seinen Zustand kennen.
Zitat:
Du schreibst, dass an gleicher Stelle das ein active Setzen nicht notwenig sei, das dies automatisch geschieht:
...ja. Automatisch heißt das du nicht darum kümmern mußt.
Delphi-Quellcode:
try
  qryMain.SQL.Text := 'SELECT * FROM WARENVERKAUF';
  // Im Open/ExecSQL wird die Query INTERN geschlossen und am Ende wieder INTERN auf Active := True gesetzt.
  qryMain.Open;
except
  on E: Exception do
    outputMemo.text := 'Fehlermeldungstext execute: ' + E.Message;
end;
Delphi-Quellcode:
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; // nicht notwendig...passiert intern
  //qryMain.Params.Clear; // nicht notwendig...passiert intern
  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; // braucht nicht wirklich geschlossen zu werden. (Ausnahmen bestätigen die Regel (keine Anzeige der Daten)) Mit der nächsten "Ausführung" passiert eh ein Close.
  IsEdit := False;
end;
Nochmal der Hinweis auf das E-Book:
http://www.delphipraxis.net/1364168-post8.html
Angehängte Grafiken
Dateityp: png bild2.png (58,7 KB, 16x aufgerufen)

Geändert von haentschman ( 9. Apr 2017 um 08:50 Uhr)
  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 02:19 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 by Thomas Breitkreuz