Decimal in Firebird

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Decimal in Firebird

Beitrag von monta »

Ich versuche gerade, Felder vom Datentyp Decimal mit den SQLdb-Komponenten zu fühlen.

Hat das schon mal jemand geschafft?

Das ganze läuft über eine StoredProc, welcher ich die Daten über eine TSQLQuery übergeb. Allerdings scheint es keine möglichkeit zu geben, oder besser - ich find keine, ein Decimal zu übergeben.

Folgendes hab ich als erstes Probiert:

Übergabe des parameters mit ParamByName(...).AsString, funktioniert auch ohne Fehlermeldung, und ich dachte, der Wert wird von den Komponenten entsprechend umgewandelt und als Decimal gespeichert, aber es kommen am Ende völlig falsche zahlen raus, so wird aus ner Zahl < 1 dann eine Zahl mit mehreren Stellen.
Einige Datensätze lassen sich außerdem nicht mehr über die Komponenten auslesen.

.AsCurrency geht nicht, mit der Meldung, das es noch nicht unterstützt wird.

.AsFloat produziert ebenfalls Fehler

Ich ha Firebird 2.0 unter Windows, es sollte aber scheinbar an den Komponenten liegen, bzw. hab ich ein Parameterformat übersehen?
Johannes

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

AsFloat oder AsNumeric sollte das sein. Wenn AsFloat Fehler produziert dürfte das an den Komponenten liegen. Ich rate ja immer noch dazu, die ZeosDBO zu verwenden. Die laufen recht stabil...
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Mit was für DB´s hast du die Zeos schon getestet schnuller ??
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

FireBird, PostgreSQL, Interbase. MySQL geht bedingt, das hängt von der Revision von MySQL ab. Oracle soll auch brauchbar gehen. PostgreSQL bis 8.1 geht auch problemlos, bei höheren Revisonen muß man probieren.

#Edit

@Christian

Bei FPC 2.1.3 müssen allerdings 2 Änderungen vorgenommen werden. Ich hab schon nach ner Möglichkeit gesucht die FPC-Version für die bedingte compilierung rauszukriegen. Wenn du da mal nen Tipp hast? Die DB-Fields haben sich bei der Version geändert, die müssen bei der ZeosDBO im Set angepaßt werden sobald die Fehlermeldung kommt. Für den 2ten Fehler gilt das gleiche.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Interessieren tun mich gerade mssql und mssql naja muss ich wohl mal probieren.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

MsSQL hab ich gerade mal im Bugtracker geguckt, da steht nur ein Fehler drin. MySQL geht bis 4.1.x wohl ganz ordentlich, bei 5.0 könnte es Probleme geben.

#Edit

Man kann übrigens beruhigt die ZeosDBO 6.6.1b nehmen, die Vorversion (6.6.0) lief auch schon recht klaglos.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Ja, problematisch find ich nur das umstellen zwischen SQLDB und Zeos, auch wenn die wohl immernoch ähnlich sind, gibts da doch immer ein paar Tücken. Aber ich muss mir erstmal die Zeos für FPC anschauen.

.AsNumeric hab ich übersehen, wenn das das Problem behebt, gibts erstauch keinen grund, auf Zeos zu wechseln.
Johannes

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Also .AsNummeric gibd es beim SQLdb Package nicht, scheint nur bei ZEOS vorhanden zu sein.

Hast du Zeos unter Windows und Linux laufen, also mit anderen Worten, läuft es überall stabil?

schnullerbacke hat geschrieben:Bei FPC 2.1.3 müssen allerdings 2 Änderungen vorgenommen werden.


Und was? Ich hab ja momentan ausgerechnet 2.1.3.
Bei der Installation stopt er ja bei der ZAbstractRODataset. Falls du die Änderung gerade griffbereit hast, wärs nett, wenn du sie mal verrätst ;)
Johannes

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

@monta

Läuft auf beiden. Wegen der 2.1.3, laß es einfach kompilieren. Der erste Fehler der auftritt kann mit {$IF FPCVER > 2.0.4} umgangen werden. Beim 2ten auf ähnliche Weise, allerdings mußt das Fieldset das da angemeckert wird durch das Fieldset ersetzen das in FPC ../source/../DB eingetragen ist. Dann funzt das auch. Deshalb hab ich schon mal gefragt ob man die FPC-Version genau ermitteln kann. Dann kann das abhängig davon kompiliert werden.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

@monta

Hier sind die Stellen, die geändert werden müssen:

Code: Alles auswählen

in: ZAbstractRODataset
 
.
.
.
procedure TZAbstractRODataset.InternalInitFieldDefs;
 
.
.
.
        with TFieldDef.Create(FieldDefs, FName, FieldType,
          Size, False, I) do
        begin
          {$IFNDEF FPC}
          Required := IsNullable(I) = ntNoNulls;
          {$ENDIF}
          if IsReadOnly(I) then
            Attributes := Attributes + [faReadonly];
          Precision := GetPrecision(I);
          //
          // an dieser Stelle abfangen, DisplayName gibt's nimmer
          //
          DisplayName := FName;
        end;
 
.
.
.
procedure TZAbstractRODataset.CheckFieldCompatibility(Field: TField;
  FieldDef: TFieldDef);
const
  //
  // hier muß das Set per {$IFDEF FPC} ersetzt werden,
  //
  BaseFieldTypes: array[TFieldType] of TFieldType = (
    ftUnknown, ftString, ftInteger, ftInteger, ftInteger, ftBoolean, ftFloat,
    ftFloat, ftBCD, ftDateTime, ftDateTime, ftDateTime, ftBytes, ftVarBytes,
    ftInteger, ftBlob, ftBlob, ftBlob, ftBlob, ftBlob, ftBlob, ftBlob, ftUnknown,
    ftString, ftString, ftLargeInt, ftADT, ftArray, ftReference, ftDataSet,
    ftBlob, ftBlob, ftVariant, ftInterface, ftInterface, ftString, ftTimeStamp, ftFMTBcd);
 
  CheckTypeSizes = [ftBytes, ftVarBytes, ftBCD, ftReference];
 
begin
  with Field do
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Danke. Funktioniert.
Johannes

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Na bitte Brigitte,

wer sagt denn das der Löwe kein Schmalz frißt... :lol:
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

schnullerbacke hat geschrieben:Man kann übrigens beruhigt die ZeosDBO 6.6.1b nehmen, die Vorversion (6.6.0) lief auch schon recht klaglos.


Also kann ich ja nicht wirklich bestätigen, spätestens wenn eine Connection mit Query auf dem Form ist, und ich Einstellungen vornehmen will, raucht mir erst die Form mit "Keine Rückmeldung" ab und Lazarus logischer Weise mit, und das wars dann.

@schnuller: Kannst es ja mal ausprobieren:

Neue Anwendung:
Connection und Query drauf
Doppelklick auf Query, und Dialog sofotr schließen
Anschließend Query nochmal markieren, damit sie in den OI kommt, und Versuchen, nen SQL-Statement zu setzen. Sobald man da drauf klickt, hat sich die Sache erledigt.
Johannes

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Ohne DB-Anbindung und FPC 2.0.4 geht's ohne Problem. Nur der Doppelklick klappt nicht, das hat aber was mit Lazarus zu tun. Das geht bei manchen anderen Kombinationen von Komponenten auch nicht. Wenn du im OI die Einstellungen machst geht's.

Versuchs mal ohne die Doppelklickerei. Ich hab jetzt nur keine Lust meine Installation wieder umzubauen auf 2.1.3.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Ist ja egal, ich dachte, du hättest noch 2.1.3.

Ich bin noch etwas gebranntmarkt, von meinen ersten Sachen mit Zeos. Damals mit Delphi 3 und Zeos 4.5 glaub ich, weil nichts neueres unter D3 lief. Und die Zeoskomponenten waren doch recht gewöhnungsbedürftig damals und nicht nur einmal hb ich die DB-Sachen neu geschrieben.

Aber ich schau mir gerade die Zeos an. Man muss ja praktischer Weise nur die Kompos vertauschen. Und so Sachen wie der SQLMonitor habens chon ihren Reiz.
Johannes

Antworten