Announcement

Collapse
No announcement yet.

ADS-Komponenten und Delphi .NET

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

  • ADS-Komponenten und Delphi .NET

    Hallo zusammen

    Ich möchte mein Projekt von Delphi.WIN32 nach Delphi.NET konvertieren. Dies hat bis auf die ADS-Komponenten auch funktioniert.
    Was muss ich tun, damit auch die ADS-Komponenten bzw. Klassen in .NET verwendet werden können?

    Vielen Dank für die Antworten.
    Beat

  • #2
    was funktioniert nicht? Sind die Komponenten nicht vorhanden oder gibt es Fehlermeldungen

    Comment


    • #3
      Hallo Herr Dürr

      Die Komponenten sind vorhanden. Es gibt unter anderem folgende Fehlermeldungen:
      Cannot resolve unit name 'adscnnct'
      'TAdsQuery' does not contain a member named 'SQL'
      Undeclared identifier 'Text'
      usw

      Comment


      • #4
        Das ist ein Problem beim Konvertieren von Win32 nach .NET: Die Dateien in der USES sind nicht qualifiziert. Ändern kann man das entweder durch Aufnahme des richtigen Dateinamens in der uses-Liste (AdsData => Advantage.VCL.AdsData, ...) oder indem man gleich einen Namespace-Prefix in den Projekteigenschaften setzt:
        in Project options->directories/conditionals->namespace prefixes "Advantage.VCL" mit aufnehmen

        Comment


        • #5
          Vielen Dank, das hat einiges gelöst. Nur mit dem adsdictionary wills nicht so recht funktionieren. Gibt es diese Komponente gar nicht mehr

          Comment


          • #6
            die Komponente ist obsolete (hat intern unheimlich viel über Zeiger gemacht und ist daher nicht ohne schlechtes Gewissen in .NET einsetzbar). Alles, das TAdsDictionary kann, ist (fast einfacher) über SQL lösbar

            Comment


            • #7
              Ich bin nun daran, die Komponente zu ersetzen, stosse aber schon auf ein Problem: Ich arbeite mit AutoInc-Feldern in meinen Tabellen. Jeweils zum Jahreswechsel müssen gewisse Tabellen eins zu eins kopiert werden. Wie stelle ich das über SQL an? Danke für die Antwort

              Comment


              • #8
                <pre>
                SELECT * INTO mytable_backup FROM mytable;
                </pre>
                Dabei wird gleichzeitig aus dem Autoinc-Feld ein Integer-Feld

                Comment


                • #9
                  Leider werden so weder die Defaultwerte noch die Indizes übernommen. Auch mit einem Integer-Feld anstatt dem Autoinc-Feld kann ich nicht leben, da der Anwender ev. wieder auf die "Backup"-Tabelle zurückgreifen muss.
                  Gibts noch eine andere Möglichkeit eine Tabelle zu kopieren oder muss ich das Konzept komplett ändern

                  Comment


                  • #10
                    Defaultwerte sind im Data Dictionary gespeichert, Indize können auch aus dem Dictionary extrahiert werden:

                    SELECT * FROM SYSTEM.COLUMNS;
                    SELECT * FROM SYSTEM.INDEXES;

                    Jetzt ist natürlich die Frage, was wirklich gemacht werden soll. Wenn nur eine Kopie der Daten erstellt werden soll, so ist ein SELECT INTO der schnellste Weg. Wenn die Tabelle exakt gleich sein soll, so würde ich nach dem SELECT INRO noch ein ALTER TABLE machen, um das Integerfeld wieder in einen Autoinc zu verwandeln.
                    Sollte auf der Kopie wie auf dem Original gearbeitet werden, so kommt dafür auf jeden Fall auch ein Backup/Restore in Frage (sichert auch die Dictionary Struktur).
                    Soll die Tabelle genau gleich sein, sich im gleichen Dictionary befinden, aber anders heißen, so entzieht sich mir der Sinn (das denormalisiert die Datenbank)

                    Comment


                    • #11
                      Vielen Dank, ich werde das Integer-Feld wieder in ein Autoinc umwandeln. Ich hab eben nicht gedacht, dass das geht.
                      Ich weiss, dass unsere Datenstruktur nicht toll ist. Sie ist halt mal so entstanden, mit Einfluss von alten DBF-Zeiten, wo das eben alles noch so einfach ging.
                      Wenn ein Rechnungsjahr abgeschlossen ist werden gewisse Tabellen kopiert und mit dem neuen Jahr im Namen versehen. Dies aus reinen Sicherheitsgründen, dass ja niemand mehr im alten Bestand etwas verändert. Im Normalfall werden diese Tabellen dann auch nur noch zur Ansicht geöffnet. Falls jedoch ein Jahresabschluss rückgängig gemacht werden muss, so müssen diese Tabellen wieder bearbeitet werden können. Wäre da das von Ihnen erwähnte Backup/Restore ein Thema? Wie funktionert das

                      Comment


                      • #12
                        in diesem Fall wird es schwierig. Wenn der Jahresabschluss in den Kopien verändert wird, so fehlen dann natürlich schon die Default-Werte (wobei man diese relativ einfach einbringen kann, indem man im Architect mit der rechten Maustaste auf die Originaltabelle geht -> create SQL script, dann das Script etwas abgeändert auf die backup-Tabelle loslässt). Ein Backup/Restore macht genau das, was es soll: Backup der Datenbank und wiederherstellen (dann allerdings überschreibt es die bisherigen Änderungen). Man kann auch in en anderes Verzeichnis ein Restore machen und enthält damit eine 1:1 Arbeitskopie der Datenbaank)

                        Comment


                        • #13
                          Vielen Dank Herr Dürr für die Hilfe! Ich werde in einem File die Struktur ablegen und dann jeweils wider einlesen.
                          Noch eine Frage: Ist es möglich, per SQL eine Column an einer bestimmten Stelle einzufügen? Bei einem ADD wird die neue Column ja immer am Schluss angefügt

                          Comment


                          • #14
                            schlüsselwort position: alter table mytable add column mycolumn datatype position

                            Comment


                            • #15
                              Funktioniert leider erst ab ADS-Version 8.0, oder?!
                              Noch eine letzte Frage: Wenn ich mittels
                              SELECT * INTO mytable_backup FROM mytable
                              eine Kopie der Tabelle erstelle, so wird diese nicht automatisch dem Dictionary angehängt. Gibt es da eine Möglichkeit, die Tabelle nachträglich noch anzuhängen

                              Comment

                              Working...
                              X