Announcement

Collapse
No announcement yet.

MYSQL + Paradox

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

  • MYSQL + Paradox

    moin,

    ich soll eine Anwendung für 2Arten von <br>
    Datenbanken entwickeln,1 x für Paradox<br>
    und 1 x für mysql(Netzwerk)<br>
    nun habe ich zwei Klassen geschrieben,1x<br>
    für Paradox mit TTable(gecastet) und 1x mit<br>
    TCientdataset(gecastet von TDataset) und <br>
    den dazugehörigen dbexpress Komponenten.<br>

    beide Klassen habe ich von einer Oberklasse<br>
    (TDM) abgeleitet in denen die Tabellen<br>
    von Tdataset abgeleitet sind.<br>
    ich greife also immer auf die Datasets zu
    die datenbankerzeugung,und öffnen schließen<br>
    geht aber Probleme mit Append,etc<BR>
    zum beispiel liefert mysql nach einem append
    keine neue ID(Autoincrement) zurück, bei <br> Paradox geht es nach einem Post. wenn <br>
    ich das unter Mysql mache springt er zum ersten
    <br>Datensatz. Kann mir jemand einen Tip geben<br> wie ich das Problem mit den zwei <br>
    Datenbanken lösen kann , oder muss ich jetzt alle Funktion für jede Klasse neu schreiben??
    MfG Andreas

  • #2
    Hallo,
    ich denke mal, du wirst nicht umhin kommen den kompletten Datenbankzugriff doppelt zu entwickeln und z.B. in getrennten Datenbankmodulen zu kapseln. Die Aufgabenstellung ist in etwa so, als ob du ein Auto bauen mußt, in dem problemlos ein Motor vom Trabant und einer vom Ford-Escort verwendet werden kann. (Wenn ich jetzt mal Paradox als Trabant einstufen darf

    Gruß Fal
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      hallo Falk,<br>
      habe da was gefunden, bei www.microolap.com<br>
      die Komponenten sind vom Aufbau sehr gut
      (TTable ähnlich) bin gerade mal am testen.
      Mfg Andrea

      Comment


      • #4
        Hallo Andreas,

        ich würde dir auch diese DAC for MySQL-Komponenten empfehlen (Haben sie selbst erfolgreich im Einsatz).

        Grundsätzlich wird du aber nicht darum herumkommen teile des DB-Zugriffs abhänig von der DB zu gestallten. Aber mit DAC for MySQL ist der Unterschied geringer als wenn Du dbExpress nehmen würdes

        Comment


        • #5
          Hallo bernhard,<br>
          probleme habe ich mit den autoincrement Feldern<br>
          getlastInsertID rufe ich im afterInsert-Ereignis auf<br>
          aber ich bekomme immer null zurück.wenn ich <br>
          Insert aufrufe und eines der Felder(ohne ID) fülle und dann ein post mache wird derdatensatz gespeichert.<br> lasse ich die Felder leer wird der datensatz nicht gespeichert.<br>
          achso , betrifft TMysqltable ;
          sonst habe ich keine Probleme entdeckt , aber
          das ist ein problem,<br> denn beim Anlegen eines neuen datensatzes brauche ich die ID.<br>
          vieleicht kannst du mir einen Tipp geben.<br>
          Da wir die Komponente erst bestellt haben ,konnte ich leider nicht debuggen ,<br>
          (der Quelltext ist in der Demo nicht enthalten);<br>

          MfG Andrea

          Comment


          • #6
            Sorry Abdreas,

            selbst verwenden wir keine AutoIncs, also habe ich auch keine tieferen Erfahrungen bei MySQL + AutoIncs.

            Schau aber mal bei der Newsgroup vorbei bzw. frag dort:

            http://www.microolap.com/support/support.htm -> MySQLDA

            Comment


            • #7
              Hallo Bernhard,
              die Tests habe ich soweit abgeschlossen,<br>
              und die Komponente haben wir jetzt im Einsatz.<br>
              Ich habe jetzt ein anderes problem:<br>
              habe eine oberklasse und dort<br>
              Tabelle1 :TTable<br>
              ....
              Database1 : TDatabase<br>

              dann habe ich zwei weitere Klassen abgeleitet<br>
              von dieser O.Klasse für Paradox und Mysql<br>
              rufe dann im Constructor<br>
              Tabelle1 := TTable.create<br>
              ....... oder <br>
              für mysql <br>

              TMysqlTable(Tabelle1):= TMysqltable.create;<br>
              ...... <br>

              entsprechend initialisiere ich dann die eine
              oder andere klasse beim Programmaufruf<br>
              dort habe ich eine variable CopyTable1:TTable<br>

              sage dann CopyTable1:= TTable.create;<br>

              oder TMYSQLTABLE(CopyTable1):= TMYSQLTABLE.create<br>
              weise dann CopyTable1:= OKlasse.Table1;
              die wichtigsten Sachen funktionieren dann <br>
              auch aber bei setKey z.B. knallt es <br>
              beim Debuggen habe ich dann gemerkt,<br>
              daser nicht in Mysqltable.pas springt sondern
              in TTable.<br>
              mit zwei variablen kann ich nicht arbeieten,.<br>
              dann kann ich gleich zwei .Exe erstellen..<br>
              ach so nachdem ich überall im Hauptprogramm.<br>
              auf TMysqlTable gecastet habe funktionierte.<br>
              es,nur geht dann logischerweise Paradox nicht..<br>
              was kann man da machen? .<br>
              MfG Andrea

              Comment


              • #8
                Dur darfst Tabelle1 nicht als TTTable definieren sondern mußt es als TDataset. Damit sparst Du dir auch die (fehlerhafte) Anweisung:

                TMysqlTable(Tabelle1):= TMysqltable.create;

                sondern kannst

                Tabelle1 := TMysqltable.create;

                Ohne den TMysqlTable-cast wirst Du ja vom Compiler ja eine Fehlermeldung bekommend das die Typen nicht kompatibel sind.

                Auch ist die einbindung von Database1: TDatabase in der Basisklasse nicht sinnvoll. TDatabase ist die Klasse für die BDE/Paradox und sollte erst in der untergeordneten Klasse hinzugefügt werden. Auch wird du ja bei der MySQL-Klase eine TmySQLDatabase-Membervariable benötigen

                Comment


                • #9
                  Hallo Bernhard,
                  erstmal Danke für die Tips,<br>
                  so hatte ich auch schon mal angefangen<br>
                  aber dann stehen mir die Funktionen wie
                  setrange, und andere nicht zur verfügung,
                  da der Compiler das nicht automatisch erkennt.
                  ???
                  muss ich diese jetzt explizit in den Klassen
                  noch einmal schreiben oder ?

                  MfG Andrea

                  Comment


                  • #10
                    Wird wohl nichts anderes übrigbleiben.

                    <pre>
                    TBasisklase = ...
                    setRange(...); virtual; abstract;

                    und in den abgeleiteten Klassen überschreiben

                    TParadox.setRange(...)
                    begin
                    (Tabelle1 as TTable).SetRange(...)
                    end;

                    TMySQL.setRange(...)
                    begin
                    (Tabell1 as TMySQLTable).SetRange(...)
                    end;
                    </pre&gt

                    Comment


                    • #11
                      ja, das habe ich mir gedacht. sch...;<br>
                      Na ja kriegen wir auch hin.<br>
                      Danke erst mal für deine Hilfe<br>

                      So läuft die Komponente ja gut und schnell,
                      nur beim Import der Daten von DBase knallt es immer und ist tirisch langsam( im Gegensatz
                      zu Abfragen oder ähnlichem)(350000 Datensätze aus 5 DBase - Tabellen
                      ???
                      Andrea

                      Comment


                      • #12
                        Evtl. Indexe anlegen oder über andere Vorgehensweise einfügen/update
                        (Optimierte Insert-/Updateanweisungen schreiben)

                        Comment

                        Working...
                        X