![]() |
Datenbank: firebird • Version: 2.1 • Zugriff über: Zeos
Fehlersuche bei Kopierroutine
hallo zusammen.
ich kopiere in meinem Programm in einer Schleife ca 100 Datensätze einer Query.
Code:
in der procedure DSneu wird per Query.post jeweils der neue Satz angelegt.
Fvkaufpos.EINZELBRUTTOPREIS := aufpos2Zquery.FieldByName('EINZELBRUTTOPREIS').AsCurrency;
procedure Tvkaufpos.DSneu; FQuery1.post; 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 |
AW: Fehlersuche bei Kopierroutine
Ich fürche aus dem Codeschnipsel lässt sich kaum eine Analyse erstellen :wink:
|
AW: Fehlersuche bei Kopierroutine
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; |
AW: Fehlersuche bei Kopierroutine
Ich seh es aber ich verstehe es nicht!
Delphi-Quellcode:
Erwartet hätte ich etwa dies: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 ;
Delphi-Quellcode:
Jedesmal (für jeden zu übernemenden Datensatz) ein 'select * ...' ist ja nun nicht so das Gelbe vom Ei.
FqueryNeuDS.SQL.Text:='Update VkaufPos set EinzelPreisNetto=:einzelpreisnetto where VKaufPos_ID=:vkaufpos_id ';
FQuery1.ParamByName('VKAUFPOS_ID').AsInteger := FVKAUFPOS_ID; FQuery1.ExecSQL; Gruß K-H |
AW: Fehlersuche bei Kopierroutine
Wäre das mit einer Stored Procedure nicht viel einfacher und performanter zu lösen?
|
AW: Fehlersuche bei Kopierroutine
Zitat:
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. |
AW: Fehlersuche bei Kopierroutine
Warum nicht in einem Statement?
SQL-Code:
insert into vkaufpos ( <Liste ohne PK> ) select <Liste ohne PK> from vkaufpos where id = :vorhandene_id;
|
AW: Fehlersuche bei Kopierroutine
Zitat:
Sicher ist beides die Überlegung wert (insert und stored proc) Aber was kann die Ursache des Fehlers sein, irgend ein Speicherproblem oder was sonst? |
AW: Fehlersuche bei Kopierroutine
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 |
AW: Fehlersuche bei Kopierroutine
Zitat:
(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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 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