Announcement

Collapse
No announcement yet.

BDE Fehler $274F unter XP

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

  • BDE Fehler $274F unter XP

    Hallo,

    weiß jemand, was der Fehler BDE $274F (Function not found in service library) bedeutet? Tritt unter XP auf, wenn ich aus einem Delphiprogramm, welches über die BDE mit meiner DB (Sybase) verbunden ist, ein weiteres Delphiprogramm starte, welches ebenfalls über die BDE auf die DB zugreifen soll.

    Ich würde gerne von der BDE weggehen, aber die Größe des Programms läßt eine kurzfristige Umstellung nicht zu. Daher muß ich noch etwas mit der BDE leben.

    Vielen Dank schon mal im voraus für Eure Hilfen.

  • #2
    Hallo,
    ich habe auch noch ein recht umfangreiches Programm das noch mit der BDE und Paradox laufen muss.
    Und das jetzt unter Windows Server 2003. Dort trat der gleiche Fehler auf. Bei mir schien es daran gelegen zu haben, daß das PrivatDir für die Anwendung keine Schreibberechtigung hatte für Jeden (Freigaben...). Trifft dies vieleicht auch für das weitere Delphiprogramm zu ?
    Ich habe übrigens eine FAT16 Partition angelegt und die OpLocks deaktiviert. Es würde mich freuen von Erfahrungen anderer zu hören die sich noch mit dem selben Problem befassen müssen, oder befassen mussten und auch eventuell eine gute Ausstiegsmöglichkeit aus der BDE und Paradox - Falle wissen.
    (Eine bei der ich nicht alle DB-Zugriffe neu schreiben muss)

    Vielen Dank schon mal im voraus für Eure Hilfen

    Comment


    • #3
      Nun ja,
      "Stichwort ist dapter pattern"<br>
      der Ausstieg beginnt mit einer eigenen Query-Komponente, die NICHT von TQuery abgeleitet ist.<br>
      Alle Properties und Methoden von TQuery müssen dort implementiert werden (SQL, Open, Close ..).
      Am besten definierst du eine Basisklasse, wo alles "virtual abstract" gesetzt ist und leitest eine eigene Klasse davon ab.<br>
      Name der Klasse ist TBaseQuery und davon abgeleitet TBdeQuery.
      In der TBdeQuery leitest du einfach alles in eine interne TQuery um.
      <p>
      Als nächstes brauchst du einen Methode<br>

      function CreateQuery: TBaseQuery;
      begin
      Result:= TBdeQuery.Create;
      end;

      <p>
      Jetzt musst du natürlich alle TQuery in deinem Code ersetzen durch TBaseQuery (nicht TBdeQuery !).
      in FormCreate (oder wo auch immer du deinen Code stehen hast, steht dann Query1:= CreateQuery;
      <p>

      Durch geeignete andere abgeleitete Klassen (TIBBaseQuery mit Verwendung von TIBDataSet) kannst du andere Zugriffskomponenten benutzen, die nicht von der Bde abhängen.
      <p>
      Das Problem mit verschiedener SQL-Syntax bekommst du damit natürlich nicht in den Griff.
      <br>
      Dafür brauchst du geeignete Adapter-DB-Klassen.
      Das Prinzip ist aber das gleiche.
      <p>
      Bei Verwendung von TTable hast du aber noch ein ganz anderes Problem, die Performance. TTable unter einem SQL-Server ist gelinde gesagt finster bei einigermassen grossen Tabellen.
      Hier bleibt dir nichts anderes übrig, als das ganze mit einer Query umzubauen (also adapter DB-Klassen verwenden, eine für Pdx, eine für XXX).
      <p>
      Eine Alternative wäre nat. ZEOS oder was ähnliches, das bedeutet aber alles umbauen.
      <p>
      Heiko
      <p>
      PS: Meine App lief bis 2002 unter Pdx, jetzt unter Interbase/Firebird.
      Ich benutze immer noch die Bde ;(, weil ich mit dem Adapter noch nicht fertig bin. (Das Programm soll ja Geld einbringen,
      *seufz*)
      Aber ich arbeite dran
      Heik

      Comment

      Working...
      X