Entwickler-Ecke
Datenbanken - Tabelle und Index zur Laufzeit erstellen...
Scrat - Di 10.12.02 14:39
Titel: Tabelle und Index zur Laufzeit erstellen...
Tag zusammen,
ich möchte zut Laufzeit eine Tabelle mit dazugehörgem Index erstellen:
hier ist mein Code:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| Table1.Close; if not Table1.exists then begin with Table1 do begin Active := False; with FieldDefs do begin FieldDefs.Clear; ADD('Datum ', ftString ,8, True); ADD('Fil', ftString ,3, True); ADD('Art', ftString ,1, True); ADD('Vknr', ftString ,4, True); ADD('Erfzeit', ftString ,4, True); ADD('Einzeit', ftString ,4, True); end; with IndexDefs do begin IndexDefs.Clear; Add('DatumIndx', 'Datum', [ixExpression]); Add('FilIndx', 'Fil', [ixExpression]); Add('ArtIndx', 'Art', [ixExpression]); Add('VknrIndx', 'Vknr', [ixExpression]); Add('ErfzeitIndx', 'Erfzeit', [ixExpression]); Add('EinzeitIndx', 'Einzeit', [ixExpression]); end; createtable; Active := True; end; end; |
Irgendwas läuft da nicht so richtig..
Fehlermeldung:
ungültiger Index Descriptor
Tabelle nicht vorhandenTabelle: c:\.....
LCS - Di 10.12.02 14:46
Hi
versuch mal anstelle von [ixExpression] (funktioniert nur mit DBase Tabellen) [ixCaseInsensitive] zu verwenden.
Wenn das eine Paradox-Tabelle werden soll, musst du ausserdem einen Primärindex für eine Tabelle vereinbaren.
Quelltext
1:
| IndexDefs.Add('', FeldListe, [ixPrimary]); |
Gruss Lothar
bis11 - Di 10.12.02 14:46
Probiere es mal so :
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| if not Table1.exists then begin with Table1 do begin Active := False; with FieldDefs do begin FieldDefs.Clear; ADD('Datum ', ftString ,8, True); ADD('Fil', ftString ,3, True); ADD('Art', ftString ,1, True); ADD('Vknr', ftString ,4, True); ADD('Erfzeit', ftString ,4, True); ADD('Einzeit', ftString ,4, True); end; with IndexDefs do begin IndexDefs.Clear; Add('DatumIndx', 'Datum', [ixprimary, ixunique]); Add('FilIndx', 'Fil', []); Add('ArtIndx', 'Art', []); Add('VknrIndx', 'Vknr', []); Add('ErfzeitIndx', 'Erfzeit', []); Add('EinzeitIndx', 'Einzeit', []); end; createtable; Active := True; end; end; |
Scrat - Mi 11.12.02 17:07
Die Fehlermeldung bekomm ich nicht weg....
Scrat - Do 12.12.02 09:57
Was bedeutet denn eigentlich die Fehlermeldung :
Ungültiger Index Descriptor
:?: :?: :?:
Scrat - Do 12.12.02 10:19
So jetzt habe ich den Quelltext ein bischen umgeschrieben..
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43:
| procedure TForm12.FormKeyPress(Sender: TObject; var Key: Char); begin if key = #13 then begin Self.Perform(WM_NEXTDLGCTL, 0, 0); Table1.Close; if not Table1.exists then begin with Table1 do begin Active := False; DatabaseName := 'dbase'; TableName := 'kgneu';
with FieldDefs do begin FieldDefs.Clear; ADD('DATUM ', ftString ,8, True); ADD('Fil', ftString ,3, True); ADD('Art', ftString ,1, True); ADD('Vknr', ftString ,4, True); ADD('Erfzeit', ftString ,4, True); ADD('Einzeit', ftString ,4, True); end; with IndexDefs do begin //IndexDefs.Clear; Add('DATUMINDX', 'DATUM', [ixExpression]); Add('FILINDX', 'FIL', [ixExpression]); Add('ARTINDX', 'ART', [ixExpression]); Add('VKNRINDX', 'VKNR', [ixExpression]); Add('ERFZEITINDX', 'ERFZEIT', [ixExpression]); Add('EINZEITINDX', 'EINZEIT', [ixExpression]); end; createtable; Active := True; end; end; end; if not (key in ['0'..'9',#8]) then key := #0; end; end. |
Die jetzige fehlermldung lautet:
Tabelle nicht vorhanden...
LCS - Do 12.12.02 10:27
Hi
so funktionierts:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| if not table1.exists then begin with table1 do begin Active := False; with FieldDefs do begin Clear; ADD('Datum', ftString ,8, True); //Hier hattest du ein Leerzeichen hinter Datum! Das hat den Indexfehler verursacht ADD('Fil', ftString ,3, True); ADD('Art', ftString ,1, True); ADD('Vknr', ftString ,4, True); ADD('Erfzeit', ftString ,4, True); ADD('Einzeit', ftString ,4, True); end; with IndexDefs do begin Clear; Add('DatumIndx', 'Datum', [ixprimary, ixunique]); Add('FilIndx', 'Fil', [ixCaseInsensitive]); Add('ArtIndx', 'Art', [ixCaseInsensitive]); Add('VknrIndx', 'Vknr', [ixCaseInsensitive]); Add('ErfzeitIndx', 'Erfzeit', [ixCaseInsensitive]); Add('EinzeitIndx', 'Einzeit', [ixCaseInsensitive]); end; createtable; Active := True; end; end; |
Gruss Lothar
Scrat - Do 12.12.02 11:16
Irgendwie funtzt das noch nich ......
woher weis das Programm eigentlich wo es die Tabelle erstellen soll???
Die soll es nämlich in c:\mail erstellen....
LCS - Do 12.12.02 12:00
Hi
Voraussetzungen in Table1 damit das funktioniert:
- TableName enthält Tabellename
- DatabaseName enthält entweder vorhandenen BDE-Alias oder existierenden Pfad (das ist die Antwort auf deine Frage)
- TableType enthält richtige Treibereinstellung (Sicherheitshalber)
Gruss Lothar
bis11 - Do 12.12.02 12:33
Schreibe das doch vor die Erstellung der Tabelle damit kannst Du bestimmen, wo die Datenbank hingespeichert werden soll :
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| WITH table1 DO BEGIN DatabaseName:='C:\Mail; TableName:= 'Kunden.DB'; Tabletype:=ttParadox; END; IF NOT FileExists(dirkunden + '\Kunden.DB') THEN BEGIN
{... hier Deine Routine zur Erstellung Deiner Tabelle ...}
END; |
Scrat - Do 12.12.02 14:02
Also .... jetzt kommt ja beim erstellen der Tabelle keine Fehlermeldung.
Aber die Tabelle wird auch ncht erstellt.... :lol:
So dass wenn ich auf die Tabelle zugreifen will die Fehlermeldung erscheint.
Tabelle nicht vorhanden
Es wirt keine*.dbf Tabelle und auch keine Index-Datei erstellt.
???????????????????????????????
LCS - Do 12.12.02 14:26
Hi
also ich habs nur mit Paradox-Tabellen getestet, aber das funzt einwandfrei. Prüf doch nochmal ob in dem Verzeichnis nicht aus Versehen noch Dateien mit diesem Namen vorhanden sind.
Gruss Lothar
Scrat - Do 12.12.02 14:59
So....
nun sieht mein Quellcode wie folgt aus:
(ich hatte noch eine KGneu.dbf auf meinem Desktop. habe ich aber gelöscht)
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| procedure TForm12.FormKeyPress(Sender: TObject; var Key: Char); begin if key = #13 then begin Self.Perform(WM_NEXTDLGCTL, 0, 0); WITH table1 DO BEGIN DatabaseName:='C:\biba\mail'; TableName:= 'kgneu.DBF'; Tabletype:=ttDbase; END; IF NOT FileExists('c:\biba\mail\kgneu.DBF') THEN BEGIN with table1 do begin Active := False; with FieldDefs do begin Clear; ADD('Datum', ftString ,8, True); ADD('Fil', ftString ,3, True); ADD('Art', ftString ,1, True); ADD('Vknr', ftString ,4, True); ADD('Erfzeit', ftString ,4, True); ADD('Einzeit', ftString ,4, True); end; with IndexDefs do begin Clear; Add('DatumIndx', 'Datum', [ixprimary, ixunique]); Add('FilIndx', 'Fil', [ixExpression]); Add('ArtIndx', 'Art', [ixExpression]); Add('VknrIndx', 'Vknr', [ixExpression]); Add('ErfzeitIndx', 'Erfzeit', [ixExpression]); Add('EinzeitIndx', 'Einzeit', [ixExpression]); end; createtable; Active := True; close; end; end; end; if not (key in ['0'..'9',#8]) then key := #0; end; |
Aktuelle Fehlermeldung:-----KEINE------
Problem: Die erstellte kgneu.dbf lässt sich nicht mit einem Datenbankprogramm öffnen.
(angeblich währe es keine Tabelle)
LCS - Do 12.12.02 15:29
Ok, also wenns ne DBase Tabelle werden soll, musst du das [ixCaseInsensitive] bei den Indexdefs wieder durch [] ersetzen weil das bei Dbase nicht unterstützt wird.
Habs auch damit probiert und funktioniert. .DBF und .MDX Datei wird erstellt und lässt sich auch problemlos öffnen.
Gruss Lothar
Scrat - Do 12.12.02 15:56
Also nun haben wir ein Problem :P
Ich benutze das Programm Microsoft Visual FoxPro 7.0 um Datenbanken zu öffnen.
Meldung beim öffnen:
---------------------------KEINE--TABELLE----------------------
bei andere Tabellen habe ich kein Problem.
Ich habe die Felder bei Indexdefs auf:
[ixExpression] oder auch nur [] gesetzt.
Keine Änderung
LCS - Do 12.12.02 16:11
| Scrat hat folgendes geschrieben: |
Also nun haben wir ein Problem :P
|
Hast du schon mal erlebt, das beim Programmieren was ohne Probleme geht? :wink:
| Scrat hat folgendes geschrieben: |
Ich benutze das Programm Microsoft Visual FoxPro 7.0 um Datenbanken zu öffnen.
|
Na dann haben wir doch nen Schuldigen :mrgreen: Abgesehen vom BS ist mein PC Microsoft-Freie Zone :lol:
Mal im Ernst: Jetzt bin ich mit meinem Latein eigentlich auch am Ende. Zumal sich Foxpro-Tabellen eigentlich ohne Probs mit Delphi öffnen lassen.
Gruss Lothar
bis11 - Do 12.12.02 18:18
@Scrat
hast Du es mal mit der Datenbankobfläche von Delphi versucht ?
@LCS
Was benutzt Du denn für ein Office ?
Scrat - Fr 13.12.02 11:46
Ja....habe ich auch....=gleiche Problem.
LCS - Fr 13.12.02 12:36
Hi
| Scrat hat folgendes geschrieben: |
| Ja....habe ich auch....=gleiche Problem. |
Ja, konnte ich auch grad nachvollziehen. Das Öffnen der Tabelle innerhalb von Delphi klappt aber problemlos. :?!?:
@bis11
StarOffice. Ich geb aber zu, dass ich noch nen zweiten Rechner habe, auf dem sich auch die übliche Microsoftsche Ausstattung befindet. :wink:
Gruss Lothar
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!