AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken ADOCommand Parameter - ich werde bekoppt
Thema durchsuchen
Ansicht
Themen-Optionen

ADOCommand Parameter - ich werde bekoppt

Ein Thema von süden · begonnen am 6. Jan 2014 · letzter Beitrag vom 7. Jan 2014
Antwort Antwort
süden

Registriert seit: 20. Feb 2009
Ort: Lindau (Bodensee)
75 Beiträge
 
Delphi 2007 Professional
 
#1

ADOCommand Parameter - ich werde bekoppt

  Alt 6. Jan 2014, 19:04
Datenbank: Access / SQL Server • Version: 2010/2005 • Zugriff über: ADO
Hallo,
ich hoffe Ihr seit meine Rettung.

a) Ich hole aus einer Tabelle Q eine Summe (ADODataset)
b) Das Ergebnis ist 416,66666666666666.
c) Mittels ADOConmmand und SQL UPDATE will ich dieses Ergebnis in eine andere Tabelle einfügen.
Ich verwende brav Parameter. Es können viele Datensätze werden.

Code:
   dKost := FieldByName('intern').AsFloat;
   ...
   Parameters.ParamByName('I').Value := dKost;
Ergebnis in der neuen Tabelle = 41666666666666666
Ich dachte, weil dKost mit Komma ist.

Umgebaut zu Stingvariable sKost.
Code:
   sKost := FieldByName('intern').AsSting;
   ...
   Parameters.ParamByName('I').Value := StringReplace(sKost, ',', '.', [rfReplaceAll]);
Ergebnis der Variable = '416.66666666666666' mit Punkt
Ergebnis in der neuen Tabelle = 41666666666666666

Sowohl mit Komma als auch mit Punkt als auch als Float/Double immer das Gleiche.

Was passiert da?
Ich dachte eigentlich mit Parametern gibt es die Probleme nicht?
Gruß süden

[Delphi 2007 Pro, WIN 7 Pro, DevEx, Fastreport, TMS]
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

AW: ADOCommand Parameter - ich werde bekoppt

  Alt 6. Jan 2014, 19:33
Was passiert bei:
Parameters.ParamByName('I').Value := FieldByName('intern').AsFloat; Value ist, soweit ich weiß, vom Typ Variant, da wird (glaub' ich) der Typ des übergebenen Wertes interpretiert.
Parameters.ParamByName('I').Value := FieldByName('intern').Value; Wenn Du die Daten von "Hand" in die Datenbank eingibst, musst Du dann als Dezimaltrenner das Komma oder den Punkt eingeben?

Ist das bei beiden Tabellen gleich?

Meine momentane Vermutung wäre, dass das Komma als Tausendertrenner erkannt wird und ist nicht für die Speicherung erforderlich. Daher wird's einfach entfernt.

Was passiert denn, wenn Du bei der Stringverarbeitung den Punkt drinne läßt?
  Mit Zitat antworten Zitat
süden

Registriert seit: 20. Feb 2009
Ort: Lindau (Bodensee)
75 Beiträge
 
Delphi 2007 Professional
 
#3

AW: ADOCommand Parameter - ich werde bekoppt

  Alt 6. Jan 2014, 19:53
In der DB Oberfläche kann ich die Zahlen mit Komma eingeben,
und sie werden auch mit Komma angezeigt und ausgewertet.

Mit Komma werden die Zahlen falsch interpretiert,
bei dem StringReplace wechsel ich ja das Komma zu einem Punkt.

Somit habe ich beide Varianten probiert.

Mit:
Code:
sqlText := 'UPDATE tSN_Budget SET [ist] = '+sKosti+', istEx = '+sKoste+' WHERE ( '
                       +'(Proj_Ident = '+QuotedStr(sProj_Ident)+') '
                       +' AND (LeistungsKlasse = '+QuotedStr(sLK)+') '
                       +' AND (Leistung = '+QuotedStr(sLeistung)+'))';
Gehts!!!
Gruß süden

[Delphi 2007 Pro, WIN 7 Pro, DevEx, Fastreport, TMS]
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: ADOCommand Parameter - ich werde bekoppt

  Alt 6. Jan 2014, 20:00
Woher soll ADO wissen, was für ein Typ der Parameter ist? Da stopfst Du irgendwas rein und das geht auch mal schief. Abhilfe: Definiere den Parametertyp explizit. Entweder im Objektinspektor, oder (wenn Du die Query zur Laufzeit zuweist)

Delphi-Quellcode:
Parameters.ParamByName('I').DataType := ftFloat;
Parameters.ParamByName('I').Value := 1.234;
  Mit Zitat antworten Zitat
süden

Registriert seit: 20. Feb 2009
Ort: Lindau (Bodensee)
75 Beiträge
 
Delphi 2007 Professional
 
#5

AW: ADOCommand Parameter - ich werde bekoppt

  Alt 6. Jan 2014, 21:10
Ist fest verdrahtet im Objektexplorer als ftFloat.
Gruß süden

[Delphi 2007 Pro, WIN 7 Pro, DevEx, Fastreport, TMS]
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: ADOCommand Parameter - ich werde bekoppt

  Alt 7. Jan 2014, 06:54
Hast Du es mal mit ftBCD statt float versucht?
Gruß, Jo
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#7

AW: ADOCommand Parameter - ich werde bekoppt

  Alt 7. Jan 2014, 07:09
Ist fest verdrahtet im Objektexplorer als ftFloat.
Access oder SQL-Server?
Zitat:
Delphi-Quellcode:
dKost := FieldByName('intern').AsFloat;
...
Parameters.ParamByName('I').Value := dKost;
Welcher Datentyp ist dKost ? Jetzt sag nicht 'Double'

Hmm..
Delphi-Quellcode:
Post(TheCodeSchnipselThatMakesDieProbleme)
IF DB=Access then
  Append(TheBeispielAccessDB)
else
  Append(TheBeispielSchemaSkript)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#8

AW: ADOCommand Parameter - ich werde bekoppt

  Alt 7. Jan 2014, 15:32
Ist fest verdrahtet im Objektexplorer als ftFloat.
Das muss nicht immer zwingend funktionieren, habe da auch schon mal die Erfahrung gemacht, dass das Ergebnis anders aussah, als erwartet.
Meine Lösung sah in etwa so aus:
Delphi-Quellcode:
  ADOCommand1.Parameters.Clear;
  ADOCommand1.CommandText := 'parametriesiertes SQL...';
  ADOCommand1.Parameters.ParamByName('jeder Parameter').DataType := ftDatentyp;
  ADOCommand1.Parameters.ParamByName('jeder Parameter').Value := Wert;
Nachsatz:

Beim Kompilieren darauf achten, dass die Entwicklungsumgebung keine geöffnete Datenbankverbindung, Abfrage... hat.

Die Datenbankverbindung immer im laufenden Programm herstellen und beenden und nicht die bereits in der Entwicklungsumgebung geöffnete Datenbankverbindung nutzen.

Geändert von nahpets ( 7. Jan 2014 um 15:36 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 01:02 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