Announcement

Collapse
No announcement yet.

IB6 & gen_id Problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • IB6 & gen_id Problem

    <PRE>
    Hallo,
    <BR>
    erstmal der Code:
    <BR>
    SQLQuery1.Active:=false;
    SQLQuery1.SQL.Clear;
    SQLQuery1.SQL.Add('Select Gen_ID(StueckGen,1) from RDB$DATABASE');
    SQLQuery1.Active:=true;
    ShowMessage(SQLQuery1.Fields[0].AsString);
    <BR>
    Das Showmessage liefert mir 1000? zurück, obwohl in der Datenbank der Wert 10008 steht. Bei 4-stelligen Werten funzt das.
    Der gleiche Befehl im SQL-Explorer abgesetzt liefert mir das korrekte Ergebniss. Was habe ich falsch gemacht ? <BR>

    Gruss
    JT

  • #2
    Hallo,

    verbirgt sich hinter <i>SQLQuery1</i> eine TSQLQuery-Komponente? Wenn ja, ist dieser Fehler normal. Borland hat seit der Auslieferung des UpdatePack#1 für Delphi 6 mehrere Bugs in dbExpress und im InterBase 6-Treiber für dBExpress bestätigt. Als Workaround kann ich nur die Typumwandlung über CAST empfehlen:
    <pre>
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    SQLQuery1.Active:=false;
    SQLQuery1.SQL.Clear;
    SQLQuery1.SQL.Add('Select CAST(Gen_ID(OS_GEN,1) AS Integer) AS GENID from RDB$DATABASE');
    SQLQuery1.Active:=true;
    ShowMessage(SQLQuery1.Fields[0].AsString);
    end;
    </pre>

    P.S:

    &gt; Was habe ich falsch gemacht ?<br>
    Der Fehler besteht darin, über dbExpress auf den InterBase zuzugreifen und trotzdem auf korrekten Daten zu bestehen

    Comment


    • #3
      <PRE>
      Hallo Andreas,
      das hat funktioniert !! Vielen Dank für Deine Hilfe.
      Aber für mich ergeben sich dadurch noch ein paar Fragen und ich hoffe Du bist so nett Sie zu beantworten. <br>
      1. Gibt es bei Borland eine Seite, wo man diese Bugs nachlesen kann ?
      2. Ist es besser beim Zugriff auf IB-DB's IBX(6.01) zu verwenden ?
      Man ließt ja auch bei IBX über jede Menge Bugs. Deshalb hatte ich nur die dbExpress-Komponenten verwenden wollen.
      <br>
      Gruss
      JT
      <br>
      PS: Nicht ich bestehe auf korrekte Daten, sondern die Anwender !! ;-

      Comment


      • #4
        Hallo,

        zur Frage 1: <br>
        Für Delphi 6 gibt es meines Wissens nach keine offizielle Seite (die würde auch zu abschreckend aussehen), nur für ältere Delphi-Versionen werden die Bugs/Probleme von Borland dokumentiert.

        zur Frage 2: <br>
        Hinter dbExpress verbirgt sich eine Alpha-Version (meine voreingenommene Einschätzung), die vielleicht im nächsten Jahr den stabilen Zustand einer Beta-Version erreicht. Aufgrund des Kylix-Abenteuers musste Borland einen BDE-Ersatz für Linux liefern, der auf die Schnelle zusammengezimmert wurde.

        zu den IBX-Bugs: <br>
        In der Tat stecken auch heute in IBX viele Bugs, für die es jedoch fast immer ein Workaround (bzw. eine Alternativ-Klasse) gibt. Der grosse Vorteil von IBX liegt darin, dass diese Komponenten direkt auf GDS32.DLL (der Treiber-DLL des InterBase aufsetzen), und die ist im Laufe der Jahre sehr stabil geworden. Im Gegensatz dazu ist für dbExpress auch die Treiber-Anbindung zum InterBase neu (und dort schlummern die meisten/gravierendsten Katastrophen).

        Für die Entwicklung von Datenbankanwendungen mit Delphi stellen zur Zeit die ADO-Objekte (nicht die ADO Express- /dbGo-Komponenten!) die stabiliste Umgebung zur Verfügung. Allerdings fehlt für den InterBase ein vollständig funktionstüchtiger kostenfreier OLE DB Provider, so dass ADO für den InterBase keine gute Wahl ist.

        Lange Rede - kurzer Sinn: Für den InterBase stellen die IBX-Komponenten die beste Lösung dar (wenn keine zusätzlichen Kosten entstehen sollen). Ansonsten haben die IBO-Komponenten (InterBase Objects) nicht ohne Grund einen sehr guten Ruf

        Comment


        • #5
          Vielen Dank für Deine ausführlichen und hilfreichen Erläuterungen. <BR><BR>
          Gruss<BR>
          J

          Comment

          Working...
          X