![]() |
Existenzprüfung von Tabellen.. bizzl komplizierter.
Hi,
ich habe 4 tabelle(Datenbanken). Tabelle1 hängt mit allen andern tabellen zusammen, also wenn die nicht existiert, dann müssen die anderen auch neu erstellt werden, egal ob sie schon existieren. Das abfragen ist ja kein problem, ich habe nur ein problem bei wenn die anderen existieren und ich die löschen und dann wieder erstellen muss. Ich habe auch ziehmlich viel Code für die ganze sache, darum wäre es auch gut wenn ihr tipps geben könntet wie ich eine geeignete funktion dazu aufbauen könnte(hab das sowieso meine probleme.. weiß nicht sorecht wie/warum ich funktioen machen sollte). Ich habe zur jeden tabelle eine procedure erstellen, die die Existenzprüfung macht und falls nicht gegeben, die tabelle erstellt:
Delphi-Quellcode:
Die Proceduren habe ich dann alle in das oncreate des progs gepackt. Die table2 wird aber nicht gelöscht und dann wieder erstellt.
procedure TFmain.Gruppe_proof;
var i, error_no: integer; query: TQuery; pfad,tabellen, name, ext: string; begin pfad := ExtractFilePath(Application.ExeName); name := ExtractFileName(Application.ExeName); ext := ExtractFileExt(Application.ExeName); tabellen:=pfad + 'tabellen'; IF NOT FileExists(tabellen + '\table1.DB') THEN BEGIn if not ForceDirectories(tabellen) then ShowMessage('Beim Anlegen von '+Tabellen+' ist ein Fehler aufgetreten!'); query := TQuery.Create(nil); with query do begin DatabaseName := tabellen; SQL.Clear; SQL.Add('create table "table1.db"'); SQL.Add('('); SQL.Add(' ID autoinc,'); SQL.Add(' Gruppe char(20),'); SQL.Add(' Name char(30),'); SQL.Add(' Vorname char(30),'); SQL.Add(' Strasse char(30),'); SQL.Add(' Hausnr char(10),'); SQL.Add(' PLZ Char(10),'); SQL.Add(' Ort char(20),'); SQL.Add(' Telefon char(30),'); SQL.Add(' primary key(ID)'); SQL.Add(')'); SQL.Add('Drop table "table2.db"') ->> Wo sollte das stehen? end; try query.ExecSQL; except on e: EDBEngineError do for i := 0 to e.ErrorCount - 1 do begin error_no := e.Errors[i].ErrorCode; if error_no <> 13057 then begin MessageDlg(e.Message + #13 + 'Error no: ' + IntToStr(error_no), mtError, [mbOK], 0); end; end; end; query.Destroy; end; end; THx, Plautzer |
Re: Existenzprüfung von Tabellen.. bizzl komplizierter.
Hallo,
ich habe das jetzt nicht ausprobiert aber hast Du mal versucht, denn Befehl zum löschen der Table2 in einer extra Abfrage abzuarbeiten. So in der Form, dass Du erst die DB Table erstellst und dann in einer neuen Abfrage schaust ob die DB Table2 schon vorhanden ist und daraufhin die gewünschte Aktion ausführst. |
Re: Existenzprüfung von Tabellen.. bizzl komplizierter.
Das hatte ich auch schon gemacht... aber gut das du mich nochmal draufgebracht hast.. da ich einen kleinen entschiedenen teil über sehen hatte.
Aber noch ne frage zu SQL:
SQL-Code:
Wie kann ich mehrer tabelle mit einmal löschen (droppen)??
with query1 do
begin DatabaseName := tabellen; SQL.Clear; SQL.Add('Drop TABLE "tabelle1.DB" ???was muss hierhin??? "tabelle2.DB"'); end; UND:
SQL-Code:
with query1 do
begin DatabaseName := tabellen; SQL.Clear; SQL.Add('Drop TABLE IF exists "tabelle1.DB"'); end; Warum funzt IF EXISTS nicht? - gibt es das irgentwas anderes? THx, Plautzer |
Re: Existenzprüfung von Tabellen.. bizzl komplizierter.
Ich würde das erst gar nicht über SQL versuchen.
Hier mal meine Variante: (ohen Löschen)
Code:
Du kannst das ja ein wenig abwandeln und sagst, wenn Table bereits vorhanden, dann lösche sie oder was auch immer passieren soll
try
If Not DirectoryExists(ExtractFilePath(ParamStr(0))+'Database') Then //überprüft ob Ordner schon existiert if Not CreateDir(ExtractFilePath(ParamStr(0))+'Database') Then //Erstell Ordner Application.MessageBox('Der Ordner konnte nicht erstellt werden', 'Fehler', 64); Form2.Table2.TableName:= 'DataBase\'+Form2.BName.Text; //Zuweisung vom TableName Form2.Table2.TableType:= ttParadox; //Zuweisung der Table Art Dir:= ExtractFilePath(ParamStr(0))+Table2.Name; IF NOT FileExists(Dir) THEN BEGIN //Prüfung ob DB schon existiert WITH Table2 DO BEGIN //wenn nicht wird sie erstellt WITH fielddefs DO BEGIN clear; ....; ....; END; createTable; END; end; except end; Zum löschen versuch mal folgendes:
SQL-Code:
Alter Table Drop "TableName"
|
Re: Existenzprüfung von Tabellen.. bizzl komplizierter.
hallo plautzer!
Zitat:
zb muss das prog verhindern, dass man kundenstammdaten löschen kann, sobald aufträge dazu existieren, ebensowenig darf man auftraege löschen können, wenn sie mal bestellpositionen haben. ich würde hier schon mal ansetzten, damit kann sich dein problem der verwaisten datensätze bzw tabellen, die mit nichts zusammenhängen gar nicht auftreten. oder hab ich da was falsch verstanden? :gruebel: dass du die tabellen neu erstellen willst, obwohl sie vorhanden sind, hängt vermutlich mit deinem autoinc-primärindex zusammen. vergib die laufende nummer selbständig, dann bleiben dir solche aktionen erspart. mfg, stefan |
Re: Existenzprüfung von Tabellen.. bizzl komplizierter.
Immer die selbe Leier: WELCHE DB BENUTZT DU?
|
Re: Existenzprüfung von Tabellen.. bizzl komplizierter.
@leuselator: er benützt paradox oder dbase und die bde...
gruss, stefan |
Re: Existenzprüfung von Tabellen.. bizzl komplizierter.
@leuselator: grayfox hat recht (ich wüsste auch garnicht warum was anderes dafür einsetzen sollte)
@grayfox ich will ja nur von den fall ausgehen, dass die erste Tabelle mal gelöscht wird, oder das mal beim ersten start die erste tabelle nicht vorhanden ist, und da will ich lieber sicher gegen und die anderen neu erstellen. Man weiss ja nie welcher fall mal eintreten kann, drum will ich lieber sichern gehen(und ausser acht gelassen, kann ich immernoch dabei lernen). Zitat:
Zitat:
@ Albi bis jetzt funzt es eigentlich super,ich werde aber mal deine vorschlag ausprobieren. Was aber anders an
SQL-Code:
als an
Alter Table Drop "TableName"
SQL-Code:
versteh ich nicht ganz.
Drop table "TableName"
Gruß Plautzer |
Re: Existenzprüfung von Tabellen.. bizzl komplizierter.
hallo plautzer!
Zitat:
Zitat:
wenn du fragen zu SQL hast, dann schau in deinen ordner BDE, dort findest du das file 'localsql.hlp'. nach dessen studium sollten keine fragen mehr offen sein ;)
Delphi-Quellcode:
hiermit löscht du in der tabelle 'names.db' das feld 'lastname' und legst ein neues in einer
ALTER TABLE "names.db"
DROP lastname, ADD lastname CHAR(30) anderen grösse an und mit
Delphi-Quellcode:
löscht du gleich die ganze mitarbeitertabelle.
DROP TABLE "employee.db"
mfg, stefan |
Re: Existenzprüfung von Tabellen.. bizzl komplizierter.
Hi leute,
ich hatte in letzter Zeit alle Hände voll zu tun, aber nun kann ich mich wieder denn schönen dingen am leben widmen .... Coden :coder: :zwinker: Zitat:
also ich hatte mir das erst so gedacht, dass wenn eine tabelle gelöscht wird, das dann die anderen auch weg müssen, da diese dann sinnlos daten enthalten, die keiner abrufen kann. Aber du hast mich auf eine Idee gebracht, ich werde immer nach einer bestimmten Zeit ein automatische backup tabelle generieren.Falls mal eine Tabelle zufällug gelöscht wird, der schaden in grenzen gehalten kann etcpp. danke auch für den Tipp mit SQL :thumb: Das spart 'ne menge zeit! Cya Plautzer |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz