AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ADS Table und Restructure

Ein Thema von trockentaucher · begonnen am 14. Jan 2006 · letzter Beitrag vom 18. Jan 2006
Antwort Antwort
Benutzerbild von trockentaucher
trockentaucher

Registriert seit: 25. Nov 2003
Ort: Dortmund
41 Beiträge
 
Delphi 7 Professional
 
#1

ADS Table und Restructure

  Alt 14. Jan 2006, 19:58
Datenbank: ADS Local • Version: 7.1 • Zugriff über: ADS Connection & DataSet
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
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
679 Beiträge
 
Delphi 12 Athens
 
#2

Re: ADS Table und Restructure

  Alt 16. Jan 2006, 13:02
keine Ahnung, was da schiefgeht (und habe auch nicht unbedingt die Zeit, das jetzt nachzubauen), aber ich rate Dir zu SQL:
ALTER TABLE benutzer ALTER COLUMN login login char(15);
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von trockentaucher
trockentaucher

Registriert seit: 25. Nov 2003
Ort: Dortmund
41 Beiträge
 
Delphi 7 Professional
 
#3

Re: ADS Table und Restructure

  Alt 17. Jan 2006, 14:25
Zitat von joachimd:
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
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
679 Beiträge
 
Delphi 12 Athens
 
#4

Re: ADS Table und Restructure

  Alt 17. Jan 2006, 14:32
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 SELECT name from system.indexes where parent='meine_tabelle' alle Indize bekommen, welche Du dann mit 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;
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von trockentaucher
trockentaucher

Registriert seit: 25. Nov 2003
Ort: Dortmund
41 Beiträge
 
Delphi 7 Professional
 
#5

Re: ADS Table und Restructure

  Alt 18. Jan 2006, 11:58
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

mfg,
Trocki
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:21 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