Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   ADS Table und Restructure (https://www.delphipraxis.net/60952-ads-table-und-restructure.html)

trockentaucher 14. Jan 2006 18:58

Datenbank: ADS Local • Version: 7.1 • Zugriff über: ADS Connection & DataSet

ADS Table und Restructure
 
Hallo an die Datenbankexperten!

Ich bastel gerade eine Update-Sequenz, die bei zukünftigen Prog.-Releases die ADS-Tabellen auf den benötigten Stand bringen soll. Gleich bei der ersten Übung habe ich so meine Probleme.

Ich möchte ein Feld in einer Tabelle modifizieren, es soll die Feldlänge geändert werden. Die Tabelle gehört zu einer DB, die im Proggy über eine ADS Connection und dem DataSet geöffnet wird. Die DB hat ein Passwort und ist encrypted, es existiert ein Index, das Feld selber ist nicht indiziert.

Nach dem Programmstart wird gecheckt, ob die DB angepasst werden soll. Ist das der Fall, wird ein Formular geöffnet (ShowModal) und folgendes kommt zum Einsatz

Delphi-Quellcode:
           with frm_main do {Tabelle im MainForm deaktivieren}
             Table_Benutzer.Active := False;

           Try
             with Table_Benutzer do {in dem Formular ist ebenfalls ein DataSet und TAdsTable angelegt}
             begin
               Exclusive := True;
               Active := False;
               Restructure('', '', 'Login, Login, Char, 15, 0');
               {Bin mit nicht sicher ob die syntax stimmt}
               Exclusive := False;
             end;
           Except
             on Exception do MessageDlg('Fehler', mtInformation, [mbOk], 0);
           End;

           boUpdateInProgress := False;
           Screen.Cursor := crDefault;

           with frm_main do
             Table_Benutzer.Active := True;
Nach dem Aufruf kommt folgende Exception vom ADS:

'Table_Benutzer: Error 5119: Error encountered when trying to open a database table. The table is not a database table.'

Hmm, die Tabelle wurde mit dem Data Architect erstellt und der DB hinzugefügt. Keinerlei Probleme im gesamten Proggy, wo Datensätze gelöscht, hinzugefügt und geändert werden. Was mache ich falsch?

Die Tabelle wird nach dieser Aktion nicht mehr in der DB geführt, ein Neustart des Proggys nicht möglich.

mfg,
Trocki

joachimd 16. Jan 2006 12:02

Re: ADS Table und Restructure
 
keine Ahnung, was da schiefgeht (und habe auch nicht unbedingt die Zeit, das jetzt nachzubauen), aber ich rate Dir zu SQL:
SQL-Code:
ALTER TABLE benutzer ALTER COLUMN login login char(15);

trockentaucher 17. Jan 2006 13:25

Re: ADS Table und Restructure
 
Zitat:

Zitat von joachimd
SQL-Code:
ALTER TABLE benutzer ALTER COLUMN login login char(15);

Hallo Joachim, das SQL-Kommando funktioniert, aber leider nur wenn zu der Tabelle kein Index existiert. Ich hatte einen Index auf zwei Felder der Tabelle, das betreffende Feld allerdings war nicht im Index. However... werde das Index-File bzw. die Indexe vorher löschen und hinterher wieder aufbauen... etwas umständlich...

Hast Du irgendwelche Tips wie man das Index-File am besten löscht und wieder aufbaut? Auch per SQL?! Ich würde es per "procedure AdsDeleteIndex( strTag : String );" versuchen.

mfg,
Trocki

joachimd 17. Jan 2006 13:32

Re: ADS Table und Restructure
 
Zitat:

Zitat von trockentaucher
Hast Du irgendwelche Tips wie man das Index-File am besten löscht und wieder aufbaut? Auch per SQL?! Ich würde es per "procedure AdsDeleteIndex( strTag : String );" versuchen.

Du kannst mit
SQL-Code:
SELECT name from system.indexes where parent='meine_tabelle'
alle Indize bekommen, welche Du dann mit
SQL-Code:
Drop index meine_tabelle.indexname
löschen kannst. Mit ADS 8.0 zB in einem Script:
SQL-Code:
declare idx cursor as select name from system.indexes where parent='meine_tabelle';
declare st string;
open idx;
while fetch idx do
  st='drop index meine_tabelle.'+idx.name;
  execute immediate st;
end while;

trockentaucher 18. Jan 2006 10:58

Re: ADS Table und Restructure
 
Well, hat soweit alles funktioniert. Vielen Dank für die Hinweise. SQL scheint in jeden Fall die erste Wahl zu sein...

btw: Habe bei den Recherchen zu der Thematik deine Tutorials zu ADS im "Entwickler" gefunden... freut mich das ich hier so prominente Unterstützung gefunden habe :-D

mfg,
Trocki


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz