AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Fehlersuche bei Kopierroutine
Thema durchsuchen
Ansicht
Themen-Optionen

Fehlersuche bei Kopierroutine

Ein Thema von khh · begonnen am 20. Mär 2012 · letzter Beitrag vom 21. Mär 2012
Antwort Antwort
Seite 1 von 2  1 2      
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#1

Fehlersuche bei Kopierroutine

  Alt 20. Mär 2012, 16:41
Datenbank: firebird • Version: 2.1 • Zugriff über: Zeos
hallo zusammen.
ich kopiere in meinem Programm in einer Schleife ca 100 Datensätze einer Query.
Code:
Fvkaufpos.EINZELBRUTTOPREIS    := aufpos2Zquery.FieldByName('EINZELBRUTTOPREIS').AsCurrency;

   

procedure Tvkaufpos.DSneu;
FQuery1.post;
in der procedure DSneu wird per Query.post jeweils der neue Satz angelegt.
das funktioniert auch täglich fehlerfrei bis auf bisher 2mal im vergangenen Jahr
Aus mir unerklärlichen Gründen steht bei diesen 2 Kopiervorgängen in mehreren EINZELBRUTTOPREIS
des Kopiervorgang der gleiche, falsche Preis von 3,30

Hat jemand von euch eine Idee zur Fehlersuche ?

danke Gruss KHH
Karl-Heinz
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Fehlersuche bei Kopierroutine

  Alt 20. Mär 2012, 16:45
Ich fürche aus dem Codeschnipsel lässt sich kaum eine Analyse erstellen
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Fehlersuche bei Kopierroutine

  Alt 20. Mär 2012, 16:57
hast ja recht

hier etwas mehr code
Code:
    aufpos2Zquery.SQL.add('select ');
    aufpos2Zquery.SQL.add('*');
    aufpos2Zquery.SQL.add('from vkaufpos where ');
    aufpos2Zquery.SQL.add('VKAUFKOPF_ID = :VKAUFKOPF_ID ');
    aufpos2Zquery.ParamByName('VKAUFKOPF_ID').AsInteger := alteaufkopf_id;
    aufpos2Zquery.open;
    aufpos2Zquery.First;
    while not aufpos2Zquery.EOF do
    begin
     // auftragspositionen anlegen
     Fvkaufpos.VKAUFPOS_ID:= 0; // trigger
     Fvkaufpos.VKAUFKOPF_ID:= Fvkaufkopf.VKAUFKOPF_ID;
     Fvkaufpos.ART_ID    := aufpos2Zquery.FieldByName('ART_ID').AsInteger;
     Fvkaufpos.BESTMENGE    := aufpos2Zquery.FieldByName('BESTMENGE').AsCurrency;
   
     Fvkaufpos.EINZELPREISNETTO    := aufpos2Zquery.FieldByName('EINZELPREISNETTO').AsCurrency;
     Fvkaufpos.GESAMTPREISNETTO    := aufpos2Zquery.FieldByName('GESAMTPREISNETTO').AsCurrency;
     Fvkaufpos.MWST    := aufpos2Zquery.FieldByName('MWST').AsCurrency;
     Fvkaufpos.MWSTSATZ    := aufpos2Zquery.FieldByName('MWSTSATZ').AsCurrency;
     usw
    usw
     Fvkaufpos.DSneu;
     // Bezeichnung anzeigen im Infosplash
     FInfoSplashForm.info1 := Fvkaufpos.BEZEICHNUNG;
     FInfosplashForm.ShowOnTop;
     FInfoSplashForm.Update(self);
     Application.ProcessMessages;
     aufpos2Zquery.Next;  


die proc DSneu

 FQuery1.SQL.clear;
     FQuery1.SQL.add('select ');
     FQuery1.SQL.add('*');
     FQuery1.SQL.add('from vkaufpos where ');
     FQuery1.SQL.add('VKAUFPOS_ID = :VKAUFPOS_ID');
     FQuery1.ParamByName('VKAUFPOS_ID').AsInteger := FVKAUFPOS_ID;
     FQuery1.open;
     FQuery1.append; // neuen Datensatz anhängen
 
   
     FQuery1['EINZELPREISNETTO']:= FEINZELPREISNETTO ;
     FQuery1['GESAMTPREISNETTO']:= FGESAMTPREISNETTO ;
     FQuery1['MWST']:= FMWST ;
     FQuery1['MWSTSATZ']:= FMWSTSATZ ;
     usw
    usw
    
     FQuery1.post;
Karl-Heinz
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Fehlersuche bei Kopierroutine

  Alt 21. Mär 2012, 10:18
Ich seh es aber ich verstehe es nicht!
Delphi-Quellcode:
    
     FQuery.SQL.add('select ');
     FQuery1.SQL.add('*');
     FQuery1.SQL.add('from vkaufpos where ');
     FQuery1.SQL.add('VKAUFPOS_ID = :VKAUFPOS_ID');
     FQuery1.ParamByName('VKAUFPOS_ID').AsInteger := FVKAUFPOS_ID;
     FQuery1.open;
     FQuery1.append; // neuen Datensatz anhängen
  
    
     FQuery1['EINZELPREISNETTO']:= FEINZELPREISNETTO ;
     FQuery1['GESAMTPREISNETTO']:= FGESAMTPREISNETTO ;
Erwartet hätte ich etwa dies:
Delphi-Quellcode:
FqueryNeuDS.SQL.Text:='Update VkaufPos set EinzelPreisNetto=:einzelpreisnetto where VKaufPos_ID=:vkaufpos_id ';
FQuery1.ParamByName('VKAUFPOS_ID').AsInteger := FVKAUFPOS_ID;
FQuery1.ExecSQL;
Jedesmal (für jeden zu übernemenden Datensatz) ein 'select * ...' ist ja nun nicht so das Gelbe vom Ei.

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

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Fehlersuche bei Kopierroutine

  Alt 21. Mär 2012, 10:31
Wäre das mit einer Stored Procedure nicht viel einfacher und performanter zu lösen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Fehlersuche bei Kopierroutine

  Alt 21. Mär 2012, 11:35
Ich seh es aber ich verstehe es nicht!
Delphi-Quellcode:
    
     FQuery.SQL.add('select ');
     FQuery1.SQL.add('*');
     FQuery1.SQL.add('from vkaufpos where ');
     FQuery1.SQL.add('VKAUFPOS_ID = :VKAUFPOS_ID');
     FQuery1.ParamByName('VKAUFPOS_ID').AsInteger := FVKAUFPOS_ID;
     FQuery1.open;
     FQuery1.append; // neuen Datensatz anhängen
  
    
     FQuery1['EINZELPREISNETTO']:= FEINZELPREISNETTO ;
     FQuery1['GESAMTPREISNETTO']:= FGESAMTPREISNETTO ;
Erwartet hätte ich etwa dies:
Delphi-Quellcode:
FqueryNeuDS.SQL.Text:='Update VkaufPos set EinzelPreisNetto=:einzelpreisnetto where VKaufPos_ID=:vkaufpos_id ';
FQuery1.ParamByName('VKAUFPOS_ID').AsInteger := FVKAUFPOS_ID;
FQuery1.ExecSQL;
Jedesmal (für jeden zu übernemenden Datensatz) ein 'select * ...' ist ja nun nicht so das Gelbe vom Ei.

Gruß
K-H
wieso update? allenfalls noch insert ...
es sollen doch neue ds geschrieben werden.

Funktioniert ja auch, nur eben in 2 von 300 Fällen geht es schief und ich kann nicht finden warum
@deddyH
wäre sicher datenbankintern auch möglich, hab mich aber mit stored proceduren noch nicht näher auseinandergesetzt.
Karl-Heinz
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Fehlersuche bei Kopierroutine

  Alt 21. Mär 2012, 11:40
Warum nicht in einem Statement?
insert into vkaufpos ( <Liste ohne PK> ) select <Liste ohne PK> from vkaufpos where id = :vorhandene_id;
Markus Kinzler
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Fehlersuche bei Kopierroutine

  Alt 21. Mär 2012, 11:44
Warum nicht in einem Statement?
insert into vkaufpos ( <Liste ohne PK> ) select <Liste ohne PK> from vkaufpos where id = :vorhandene_id;
das ist natürlich auch ne Möglichkeit, und wahrscheinlich auch performanter.
Sicher ist beides die Überlegung wert (insert und stored proc)
Aber was kann die Ursache des Fehlers sein, irgend ein Speicherproblem oder was sonst?
Karl-Heinz
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Fehlersuche bei Kopierroutine

  Alt 21. Mär 2012, 12:00
Nachdem nach einer ID gefragt wurde nahm ich fälschlicher Weise an es ginge um schon vorhandene Datensätze..........geschenkt.
"Speicherprobleme" sind so selten, daß man sie eigentlich ausschließen kann.
Die meisten Speicherprobleme sitzen vor der Tastatur, und haben ein Problem mit der Bereichsprüfung etc.

Abgesehen davon, daß "3,30" falsch ist, was wäre denn richtig gewesen?
Könnte es sein, daß auf dem weg von der Datenbank in Dein Programm und von dort wieder in die Datenbank ein Rundungsfehler aufgetreten ist?

Das soll schon ofter vorgekommen sein.

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

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Fehlersuche bei Kopierroutine

  Alt 21. Mär 2012, 12:04
"Speicherprobleme" sind so selten, daß man sie eigentlich ausschließen kann.
Die meisten Speicherprobleme sitzen vor der Tastatur, und haben ein Problem mit der Bereichsprüfung etc.

Abgesehen davon, daß "3,30" falsch ist, was wäre denn richtig gewesen?
Könnte es sein, daß auf dem weg von der Datenbank in Dein Programm und von dort wieder in die Datenbank ein Rundungsfehler aufgetreten ist?

Das soll schon ofter vorgekommen sein.

Gruß
K-H
leider nein, die 3,30 stehen in mehreren der 100 ds die "normalerweise" völlig andere Werte enthalten.
(von z.B. 0,90 € bis 20,95 €)
also keinerlei erkennbaren Zusammenhang zwischen den Werten.

Ich dachte zuerst an einen Initialisierungsfehler , aber bei der Zuweisung:
Fvkaufpos.EINZELPREISNETTO := aufpos2Zquery.FieldByName('EINZELPREISNETTO').AsCu rrency;
sollte das eigentlich sowieso irrelevant sein
Karl-Heinz

Geändert von khh (21. Mär 2012 um 12:06 Uhr)
  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 13:56 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