Announcement

Collapse
No announcement yet.

dbExpress Driver

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

  • dbExpress Driver

    Hallo Leute,

    ich arbeite hauptsächlich mit Informix und bei den ersten Artikel über dbExpress war die rede einer Informix Unterstützung. Jetzt teste ich Delphi 6 und sehe leider, daß <b>Informix nicht unterstützt</B> wird. Kann mir jemand sagen, wo ich Infos erhalten kann wie man einen solchen Driver schreiben kann.

    Marco Schwarz

  • #2
    Hallo

    nimm doch einen Informix ODBC Treiber und gehe ueber
    dbexpress-odbc auf Informix

    dbExpress / ODBC Treiber sind im www zu finden

    bye
    Kar

    Comment


    • #3
      Hallo,
      schaue doch mal unter www.luxena.com dort findest du dbexpress treiber. Die benötigen aber auch eine DLL aus den ODBC treibern.

      Gruss Jen

      Comment


      • #4
        Hallo zusammen<br><br>

        Ich suche nach einer Möglichkeit meine C/S-Applikation mit all den netten Features
        die heutzutage Standard sind (z.B. Neusortierung im DBGrid bei Doppel-Klick auf den Spaltenkopf, bi-direktionales Scrollen, etc.) möglichst <b><i>unabhängig</b></i> von der darunterliegenden Datenbank zu entwickeln. Ideal wäre eine abstrakte Connectivity-Schicht, die es zuläßt zwischen verschiedenen Datenbanksystemen zu wechseln <b><i>ohne die Datensteuerungskomponenten verändern zu müssen</b></i>.

        Im Moment tendiere ich zu einer Kombination aus:<br><br>
        <b>dbExpress</b> + <b>DataSetProvider-</b> + <b>ClientDataSet</b>-Komponenten.<br><br>

        Wenn ich das ganze richtig verstehe, dann gestattet mir dbExpress Zugriff auf
        die nativen Netzwerk-Schichten des jeweiligen Datenbankherstellers - ich komme
        also gänzlich ohne BDE oder ODBC aus und da es sich um eine herstellerspezifische
        Zugriffsschicht handelt, glaube ich damit eine performante Lösung zu haben.

        Den Nachteil unidirektionaler Datenmengen kann ich wohl mit ClientDataSet ausgleichen, indem lokal in der Datenmenge navigiert und sortiert wird - das klingt ebenfalls nach
        guter Performance bei gleichzeiter Plattformunabhängigkeit - so weit - so gut.
        <br>
        Einziger Wehrmutstropfen scheint die Tatsache zu sein, daß sich dieses Modell für
        Master/Detail-Zugriffe nicht eignet(hab ich jedenfalls gelesen) - ist dem so ?
        und wenn ja, welche Alternativen habe ich eine Master/Detail-Komponente zu implementieren, wenn ich bei dbExpress+ClientDataSet bleiben will ? Liege ich mit meiner Einschätzung zu
        dbExpress + ClientDataSet überhaupt richtig (Ziel wäre also größtmögliche Portierbarkeit
        bei gleichzeitig minimaler Notwendigkeit die Sourcen verändern zu müssen).

        Bin für jeden Tip wirklich dankbar<br><br>
        Schönen Gruß - Joerg.<br>

        </body>
        </html&gt

        Comment


        • #5
          Hi Joerg,
          natürlich kannst du eine Master/Detail Verbindung über ein ClientDataSet erstellen.

          Es gibt zwei Möglichkeiten:
          a) 1. Zwei DataSets(z.B. SQLQuerys)
          2. Zwei Provider
          3. Zwei Datasources
          4. Zwei ClientdataSets
          Hierbei müßte das Detail-ClientDataset einen Mastersource erhalten u. wie bisher
          über die Masterfields verbunden werden.

          b) 1. Zwei DataSets(z.B. SQLQuerys)
          2. Ein Provider
          3. Zwei Datasources
          4. Zwei ClientdataSets
          Hierbei wird das Detail-Dataset über einen Mastersource im SQL-Code verbunden.
          Bsp: Select * from TblDetail
          where DetailID=:MasterID

          Wenn du jetzt einen Masterdatensatz anforderst ist die komplette Datailmenge in einem
          zusätzlichen Feld(DataSetfield) vorhanden.

          Nun muß das Detail-ClientdataSet nur noch mit seiner Eigenschaft DataSetfield
          verbunden zu werden. und schon kommen immer die korrekten Details.

          Ich verbinde dieses Detai-ClientDataSet zur Laufzeit.

          ---- Ungefähr so...
          uses RTLConsts;

          Procedure SetMasterDetailDataSetField(AMaster,ADetail : TDataSet);
          VAR I : Integer;
          BEGIN
          ADetail.DataSetField:=NIL;
          for I := 0 to AMaster.FieldCount - 1 do
          if AMaster.Fields[I].DataType in [ftDataSet, ftReference] then
          begin
          ADetail.DataSetField := TDataSetField(AMaster.Fields[I]);
          Break;
          end;
          IF Not Assigned(ADetail.DataSetField) THEN
          Raise Exception.Create(SInvalidProperty+' Procedure SetMasterDetailDataSetField');
          END;

          Procedure SetMasterDetailDataSetFieldByName(AMaster,ADetail : TDataSet;ADataSetFieldName : String);
          VAR I : Integer;
          BEGIN
          ADetail.DataSetField:=NIL;
          for I := 0 to AMaster.FieldCount - 1 do
          if AMaster.Fields[I].DataType in [ftDataSet, ftReference] then
          begin
          IF UpperCase(AMaster.Fields[I].FieldName)=UpperCase(ADataSetFieldName) THEN
          BEGIN
          ADetail.DataSetField:= TDataSetField(AMaster.Fields[I]);
          Break;
          END;
          end;
          IF Not Assigned(ADetail.DataSetField) THEN
          Raise Exception.Create(SInvalidProperty+' Procedure SetMasterDetailDataSetFieldByName');
          END;

          --------
          Vielleicht sollte ich noch erwähnen, dass du die geänderten Datensätze schon mit MasterCDS.ApplyUpdates(-1)
          sowohl für den Master als auch für das Detail in einem Rutsch zum Server schickst.

          Damit die Datenmenge auf dem Client nicht zu gross,wird sollte das MasterCDS die Eigenschaft
          PacketRecords auf 20 eingestellt sein.

          Bis dann
          Ral

          Comment

          Working...
          X