AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken gesonderte Ergebnisberechnung in DB-Tab eingeben
Thema durchsuchen
Ansicht
Themen-Optionen

gesonderte Ergebnisberechnung in DB-Tab eingeben

Ein Thema von EdAdvokat · begonnen am 11. Apr 2017 · letzter Beitrag vom 13. Apr 2017
Antwort Antwort
EdAdvokat

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

AW: gesonderte Ergebnisberechnung in DB-Tab eingeben

  Alt 11. Apr 2017, 21:42
So nun die letzte Variante für heute:
Delphi-Quellcode:
procedure TMainFrm.btnTestInput1Click(Sender: TObject);
var
  CurrentCustomerID: string;
begin
  //if IsEdit then
begin
  CurrentCustomerID := lvProductList.Selected.Caption;
  qryMain.SQL.Text:= 'UPDATE WARENVERKAUF1 SET ANZAHL = :ANZ WHERE ID= :CID';
  //qryMain.SQL.Text:= 'UPDATE Warenverkauf1 SET KDNR = :KNR, NAME = :NAM, VORNAME = : VNA, FIRMA = : FIR, PRODUKT = : PRO, ANZAHL =: ANZ, PREIS = :PRE WHERE ID = :CID';
  qryMain.ParamByName('CID').AsString := CurrentCustomerID;
  //qryMain.ParamByName('KNR').AsString := edtCustomerNumber.text;
  //qryMain.ParamByName('NAM').AsString := EdtName.text;
  //qryMain.ParamByName('VNA').AsString := EdtVorname.text;
  //qryMain.ParamByName('FIR').AsString := EdtFirma.text;
  //qryMain.ParamByName('PRO').AsString := EdtProdukt.text;
  qryMain.ParamByName('ANZ').asInteger:=strtoint(edtTestInput2.text);
  //qryMain.ParamByName('PRE').AsString := EdtPreis.text;
  qryMain.ExecSQL;

  qryMain.SQL.Text := 'SELECT ID,KDNR,NAME,VORNAME,FIRMA,PRODUKT,ANZAHL,PREIS FROM WARENVERKAUF1';
  qryMain.Open;
   while not qryMain.EOF do
   begin
     RefreshItems(qryMain.FieldByName('ID').AsString,
                  qryMain.FieldByName('KDNR').AsString,
                  qryMain.FieldByName('Name').AsString,
                  qryMain.FieldByName('VORNAME').AsString,
                  qryMain.FieldByName('FIRMA').AsString,
                  qryMain.FieldByName('PRODUKT').AsString,
                  Inttostr(qryMain.FieldByName('ANZAHL').AsInteger),
                  qryMain.FieldByName('PREIS').AsString);
     qryMain.Next;
   end;
end;
end;
Also isEdit war wohl ein Störenfried. Habe ihn rausgenommen. in der Variante nur ID für Anzahl (s.o.) klappt es!!!
Er reagiert auf die Eingabe im Editfeld mit 66666 so, dass er mir die Datensätze kopiert und in der Kopie die Eingabe von 66666 aufführt. Beim Neustart ist dann in der Tabelle die 66666 exakt enthalten. Ist zwar komisch, doch es geht erst einmal.
Mit allen Feldern wollte er nicht und hat bereits bei VNA gemeckert, dass er VNA nicht kennen würde. Also dann zur Variante 2 - nur Anzahl übergegangen und hier das Ergebnis. Morgen will ich mir die Sache nochmals genauer ansehen.
Nochmals vielen Dank bislang. Wenn ihr eine Erklärung für das Verhalten haben solltet, wäre ich dankbar.
Jedenfalls klappt es mit dem obigen Code wie beschrieben.
Norbert
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

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

AW: gesonderte Ergebnisberechnung in DB-Tab eingeben

  Alt 12. Apr 2017, 06:05
Halleluja...
Zitat:
if IsEdit then // Ist das Flag gesetzt?
...hatte ich doch gesagt.

Was fällt dir in den 3 Codeauszügen auf?
Delphi-Quellcode:
qryMain.SQL.Text := 'UPDATE WARENVERKAUF1 SET KDNR = :KNR, NAME = :NAM, VORNAME = :VNA, FIRMA = :FIR, PRODUKT = :PRO, ANZAHL = :ANZ, PREIS = :PRE WHERE ID = :CID';
...
RICHTIG (weil von mir): Leerzeichen als Abtrennung "Name = AR", Jeder Paramater ist ein : gefolgt von einem Kürzel "ID = :CID"
Delphi-Quellcode:
qryMain.SQL.Text:= 'UPDATE Warenverkauf1 SET KDNR = :KNR, NAME = :NAM, VORNAME =: VNA, FORMA = : FIR, PRODUKT = : PRO, ANZAHL =: ANZ, PREIS = :PRE WHERE ID =CID';
...
FALSCH: Manche Parameter haben kein : und andere ein Leezeichen im Namen (ANZAHL =: ANZ)
Delphi-Quellcode:
qryMain.SQL.Text:= 'UPDATE Warenverkauf1 SET KDNR = :KNR, NAME = :NAM, VORNAME = : VNA, FIRMA = : FIR, PRODUKT = : PRO, ANZAHL =: ANZ, PREIS = :PRE WHERE ID = :CID';
...
FALSCH: Manche Parameter haben ein Leezeichen im Namen (ANZAHL =: ANZ)...andere stimmen wieder. (ID = :CID)

Das das hier geht ist normal:
Delphi-Quellcode:
qryMain.SQL.Text:= 'UPDATE WARENVERKAUF1 SET ANZAHL = :ANZ WHERE ID= :CID';
.
...trotzdem: kein Leerzeichen als Abtrennung "ID= :CID"
Zitat:
Mit allen Feldern wollte er nicht und hat bereits bei VNA gemeckert, dass er VNA nicht kennen würde.
Logisch bei so vielen Tippfehlern...Parametername (siehe oben). Wie kriegt man das hin mit Copy/Paste über den Quelltext solche Fehler einzubauen.

Parameter auch wenn es FireDac ist, es ist überall gleich:
http://docwiki.embarcadero.com/RADSt...ands_(FireDAC)
Zitat:
To put a parameter marker into the SQL text, use the :<name> syntax.
Du hattest versprochen die Codevervollständigung und den Formatter zu benutzen... Da könnte sowas nicht bei rauskommen.
Zitat:
qryMain.ParamByName('NAM').AsString := EdtName.text;
qryMain.ParamByName('ANZ').asInteger:=strtoint(edtTestInput2.text);
Auch wenn du das für dein Hobby machst...denke bitte an unsere empfindlichen Augen. Ein ordentlicher Quelltext mit vernüftigen Einrückungen läßt sich deutlich besser lesen.

Geändert von haentschman (12. Apr 2017 um 06:09 Uhr)
  Mit Zitat antworten Zitat
EdAdvokat

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

AW: gesonderte Ergebnisberechnung in DB-Tab eingeben

  Alt 12. Apr 2017, 08:11
vergib es mir, es war schon spät und den Tag über wuseln meine beiden Enkel herum. Meine Konzentration war nicht mehr gegeben. Leider habe ich den Fehler gemacht, die mail auszudrucken und dann die Hinweise per Hand statt copy/paste einzugeben. Die Codevervollständigung habe ich eingeschaltet und benutze sie, doch hier und da habe ich wohl einfach nicht drauf gesehen und weitergeschrieben, stur wie ich manchmal so bin. Ich gelobe Besserung. Das mit den Leerzeichen habe ich nicht gewußt.
Nun werde ich die ganze Sache nochmals in Ruhe betrachten.
Ist das normal, dass er nach der Eingabe und dem ButtonClick die gesamte Tabelle mit den Datensätzen zb. 1-10 nochmals als neue Tabelle hinter 10 mit 1-10 und den neuen Werten wiederholt? Beim Neustart des Programms ist dann alles paletti mit dem neuen Wert.
Norbert
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

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

AW: gesonderte Ergebnisberechnung in DB-Tab eingeben

  Alt 12. Apr 2017, 08:26
Moin...
Zitat:
Ist das normal, dass er nach der Eingabe und dem ButtonClick die gesamte Tabelle mit den Datensätzen zb. 1-10 nochmals als neue Tabelle hinter 10 mit 1-10 und den neuen Werten wiederholt?
Das liegt am RefreshItems. Hier wird die gesamte ListView neu aufgebaut. Das fehlt nur ein beherztes lvProducts.Items.Clear ...nicht nur CLEAR.
Zitat:
es war schon spät und den Tag über wuseln meine beiden Enkel herum. Meine Konzentration war nicht mehr gegeben.
...denkbar schlechte Voraussetzungen zum Programmieren.
  Mit Zitat antworten Zitat
EdAdvokat

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

AW: gesonderte Ergebnisberechnung in DB-Tab eingeben

  Alt 12. Apr 2017, 19:42
Nach all den Mühen versuche ich nun eine Navigation für die Datentabelle zu implementieren. Geht das überhaupt in dem Programm, ähnlich dem DBNavigator. Als Pilotlösung habe ich einen Next-Button auf das Formular gelegt mit folgender Procedure:
Delphi-Quellcode:
procedure TMainFrm.btnNextClick(Sender: TObject);
begin
  qryMain.Close;
  qryMain.SQL.Clear;
  qryMain.SQL.Text:='SELECT * FROM WARENVERKAUF1';
  qryMain.Open();
  If not qryMain.IsEmpty then
   qryMain.Active:=true;

   qryMain.Next;
end;
Sicher ist manches doppelt gemoppelt doch auch so tut sich wieder mal überhaupt nichts. keine Fehlermeldung aber der Datensatz springt nicht zum nächten.
Zuvor hatte ich trotz Query.open die Fehlermeldung "Operation ist bei geschlossener Datenmenge nicht möglich" obwohl ich query.open und auch query.active:=true; gesetzt hatte.
Geht das was ich will überhaupt in der vorliegenden Konstalation?
Norbert
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: gesonderte Ergebnisberechnung in DB-Tab eingeben

  Alt 12. Apr 2017, 22:18
Was willst Du erreichen?
Mit der bisher besprochenen Abfrage stehen Dir die abgefragten Daten zur Verfügung. Wenn Du in dieser Menge (Listview?) navigieren willst, mußt Du dies in der Listview machen und nicht durch eine neue Abfrage.

Zu Deiner Abfrage:
durch das .Open wird die Abfrage durchgeführt (.Open entspricht .Aktive:=True; .Close entspricht .Aktive:=False )
das .Aktve:=True; ist somit überflüssig.
Du holst die abgefragten Daten nicht ab (MyStringValue:=Query.FieldbyName('Feldname').asstring; ).
Das .Next setzt zwar den Zeiger auf den zweiten Wert, aber das ist vollkommen unnütz, da Du mit den Daten nichts anfängst.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: gesonderte Ergebnisberechnung in DB-Tab eingeben

  Alt 13. Apr 2017, 08:00
Hab mir dein Projekt nicht angeguckt, kann also nicht so konkret antworten wie p80286, aber wenn ich mir in einer Datenmenge den nächsten Datensatz anzeigen lassen möchte, muss ich nicht die jedesmal die Datenmenge schließen und neu öffnen (das ist im Gegenteil sogar kontraproduktiv). Es genügt ein .Next:

Delphi-Quellcode:
procedure TMainFrm.btnNextClick(Sender: TObject);
begin
  if not qryMain.EOF then //ggf. unnötig
    qryMain.Next;
  //Dann was du mit den Daten machen willst, gehe ich nach obigen Posts, sowas?:
  RefreshItems(qryMain.FieldByName('ID').AsString,
               qryMain.FieldByName('KDNR').AsString,
               qryMain.FieldByName('Name').AsString,
               //...
               );
end;
Ralph
  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 18:23 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