aLeXanDer.. Geschrieben 18. Februar 2008 Geschrieben 18. Februar 2008 Hallo Community, Ich bin gerade darüber ein ähnliches Programm zu schreiben wie die Borland Datenbankoberfläche. Mit dem Programm soll man eine neue "Tabelle" erstellen können als auch eine bestehende Tabelle lesen können und bearbeiten. TTable* Table1; Table1 = new TTable(this); Table1->DatabaseName = ...; Table1->TableName = ...; Größe und Datentyp kann man auch noch einstellen. Ich möchte aber auch gerne eine Vorgabe eingeben lassen, praktisch welcher Wert eingtragen wird wenn kein wert vorhanden ist und das man ein Minimum und Maximum eingeben kann. Jedoch finde ich darüber keine Befehle oder ähnliches. Das wäre mein Probelm was mir bei der Erstellung noch fehlen würde. Und beim bearbeiten fehlt mir schon mal das wichtigste und zwar weiß ich nicht wie ich die Strukturinfos der Datenbanktabelle auslesen kann. Also Feldname, DTYP, Größe ect.... Habs jetzt hier unter Compilerspezifischer Programmierung reingestellt. Vielleicht hat schon jemand Erfahrung damit und kann mir helfen. Danke Alex Zitieren
aLeXanDer.. Geschrieben 19. Februar 2008 Autor Geschrieben 19. Februar 2008 Noch keiner damit erfahrungen gesammelt? Also ich bin schon soweit gekommen das ich die Tabelleneigenschaften auch wieder auslesen kann, hat zwar gedauert aber ich habs geschafft =). Nun fehlen mir immernoch die Eigenschaften : "Minumum - Kleinst möglichster Wert den das Feld annehmen darf" "Maximum - Größt - " - " "Vorgabe - Welchen Wert das Feld erhält wenn keine Eingabe getätigt wird" @ Klotzkopp Bin ich schon im richtigen Forum hier, wenn ich das mit Borland und C++ machen will? Also die Datenbank meine ich. Ansonsten müsstest du mich halt verschieben. Danke Alex Zitieren
Amstelchen Geschrieben 19. Februar 2008 Geschrieben 19. Februar 2008 ich sehe nicht, wo das problem sein soll. wenn du TTable verwendest, kannst du doch auch die FieldDefList eruieren und field->Name, field->DataType und field->Size ermitteln. von Size kannst du die length ja ableiten; varchar z.b. ist variabel, also entspricht die feldlänge genau Size, ist der DataType int, dann ist der genwöhnlich 11 bytes lang. wenn ich das falsch verstanden haben sollte, bitte --v. s'Amstel Zitieren
aLeXanDer.. Geschrieben 20. Februar 2008 Autor Geschrieben 20. Februar 2008 Mhh ich verstehe nicht ganz was du meinst und umgekehrt wahrscheinlich auch. Also ich will nur mit Code eine Datenbank erstellen. TTable Und um eine Datenbanktabelle zu erstellen brauche ich den : -Alias -Tabellenname -Feldname -Feldtyp -eventl. Anzahl der Zeichen die der Feldtyp belegt -Ob das Feld unbedingt einen Wert enthalten muss -Ob es ein Primärfeld werden soll. --->>>Diese Definitionen habe ich schon alle Jedoch gibt es in der Datenbankoberfläche von Borland auch noch die Eigenschaften -Minimum : Kleinsten zulässigen Wert für dieses Feld -MAximum : Größten zulässigen Wert für dieses Feld -Vorgabe : Vorgabewert für dieses Feld -Eingabemaske: Eingabemaske für dieses Feld (und eventl. noch Sekundärindizies.) Diese Definitionen "Fehlen" mir noch. bzw. ich finde keine Hilfe wie man diese unter Eigenschaften der Tabelle/Datenbank programmieren kann. Die Eigenschaften wo du beschrieben hast, habe ich also schon und um den Datentyp zu bekommen habe ich nicht mit Length überprüft, sondern es gibt spezielle Werte für jeden Datentyp Int = 1 String = 3 usw. Vielleicht weißt du für meine noch offenen Definitionen ja eine Lösung Alex Zitieren
aLeXanDer.. Geschrieben 20. Februar 2008 Autor Geschrieben 20. Februar 2008 Ich bin mal darauf gekommen eine Table von Borland zu nehmen und dann dort in dem Eigenschaftenfenster nachzuschauen wie die Eigenschaften dort benannt sind und siehe da. Vorgabe ist DefaultExpression Min ist MinValue Max ist MAxValue nur sind das keine Mitglieder von FieldDefs... Habe nur sowas gefunden wie Table1->Fields->Fields[i]->DefaultExpression; nur wenn ich jetzt hier einen Defaultwert eintragen lasse Gibts nen Fehler das Index das Maximum(x) überschreitet... Und Min und MaxValue habe ich dann in gar keiner Code-Form gefunden für Fields.Nur das es Min und MaxWerte für ein Integerfeld angibt. Also bin ich immernoch nicht wirklich weiter Zitieren
aLeXanDer.. Geschrieben 25. Februar 2008 Autor Geschrieben 25. Februar 2008 Also bei den Eigenschaften , Maxvalue ,...,Defaultexpression wird jeweils das Feld des jeweiligen DAtentyps selbst angesprochen also sowas wie if (StringGrid1->Cells[1][i] == "ftInteger") { TIntegerField* IntFeld; IntFeld = new TIntegerField(this); IntFeld->DefaultExpression = StringGrid1->Cells[5][i]; Hier nehm ich an müsste ich es TABLE1 sagen das er das speichern soll } Nur , wie sag ich der Table1 das sie das dem jetzigen Element mit hinzufügen soll. Also das sie weiß das sie das mit abspeichern soll ? Zudem stoße ich dann auf das Problem wie ich das ganze wieder lesen soll wenn ich eine Datenbank in mein Programm lade. Habe schon GetIndexInfo() gefunden, jedoch nicht wie ich es einsetze. Naja das ist der aktuelle Stand vielleicht kann jemand weiterhelfen =) Zitieren
aLeXanDer.. Geschrieben 28. Februar 2008 Autor Geschrieben 28. Februar 2008 Also das mit DefaultExpression und MinMaxValue habe ich mal add Acta gelegt. Wenn mir doch noch wer weiterhelfen kann einfach Post =) Neues Problem : Ich will z.B eine bestehnde Tabelle lesen. Feldnamen , Größe ect. Klappt auch wunderbar. Der Nutzer kann nun Änderungen vornehmen. Größer verändern, Feldnamen, ect. Wie speichere ich nun diese Daten ab ohne bestehende Datensätze zu löschen?!! mit Table1->CreateTable(); Werden zwar wunderschön die Änderungen übernommen aber eben halt eine "neue Tabelle" erstellt! ..> Datenweg. Suche dann noch weitere Möglichkeiten wie , Felderreihenfolge ändern, also verschieben.. Wär schön wenn da jemand Ahnung hat und mir helfen könnte =) Alex Zitieren
Pointerman Geschrieben 28. Februar 2008 Geschrieben 28. Februar 2008 Moin! Schau Dir doch mal den "ALTER"-Befehl an. Damit kannst Du neue Spalten zufügen, bestehende löschen, Datentypen ändern usw. Zitieren
aLeXanDer.. Geschrieben 28. Februar 2008 Autor Geschrieben 28. Februar 2008 Ich bin ja dabei das mit einem Table-Objekt zu erstellen, Wenn ich dann mitten im Programm umschwänke auf SQL Befehle beißt sich das dann irgendwo.Zudem kann ich ja mit meinem Paradox DB und den SQL Möglichkeiten der Datenbank das gar nicht ausüben... Zitieren
Pointerman Geschrieben 28. Februar 2008 Geschrieben 28. Februar 2008 Hab gerade entdeckt, daß Du die Antwort schon in einem anderen Forum bekommen hast... Eine vielleicht nicht ganz saubere Möglichkeit wäre, daß Du Deine vorhandene Tabelle in eine Dummy Tabelle kopierst, die bis auf den Namen die gleichen Eigenschaftem wie die Ursprungstabelle hat. Dann löscht Du Deine Originaltabelle und legst eine Tabelle mit neuem Namen, aber geänderten eigenschaften an. Jetzt kopierst Du alle Daten aus der Dummytabelle in die "geänderte" Tabelle und hast... TAADAAA ... sowohl die neuen Eigenschaften, als auch die alten Daten. Mal aus reiner Neugierde: Wozu willst Du denn so etwas bauen, wenn es a) Viel schönere Datenbanken gibt Es doch schon die von Dir erwähnt Borland Datenbankoberfläche gibt? Zitieren
aLeXanDer.. Geschrieben 28. Februar 2008 Autor Geschrieben 28. Februar 2008 Ich darf sowas machen weil laut Borland die Datenbankoberfläche nicht mehr weiterentwickelt wird, also bei den neuen Compilern nicht mehr vorhanden. Und wenn man z.B beim Kunden ne Änderung vornehmen muss, kann man ja auch wenn se noch existiert ,nicht immer die DatenbankOberfläche installiern usw. Ja und noch ein Grund, der Chef sagt das =) Ich hab gesehen , das des mit Alter eigentlich machbar ist, aber verdammt aufwendig und mit viiieell viiiell denksport verbunden ist. Weil man ja die Datenbank vorher mit Table erstellt hat, also ich =) und dann die DTYPS dementsprechend abspeichern usw. Jah und des ist ja dann immer Variabel , weils immer ne andere DB ist. Die 2.te Möglichkeit wo du genannt hast hatte ich auch schon im Kopf, kannst du bitte mal von dieser Methode nen Auszug posten, falls du einen hast? Danke Alex Zitieren
Pointerman Geschrieben 28. Februar 2008 Geschrieben 28. Februar 2008 Ich habe so etwas noch nicht geschrieben und kann Dir da leider nicht groß weiterhelfen. Du hast Doch aber eigentlich schon die meisten Teilprobleme gelöst: 1. Aufbau der Tabelle auslesen 2. Neue Tabelle (Temp) mit den in 1. gewonnen Einstellungen erstellen 3. Jetzt die Daten in die neue Tabelle (Temp) umschaufeln. 4. jetzt die alte Tabelle löschen 5. Neue Tabelle mit dem Namen der alten anlegen. Eigenschaften wie gewünscht festlegen. 6. Mal wieder Daten umschaufeln, diesmal in Deine neue Tabelle. 7. Die temporäre Tabelle löschen Zitieren
aLeXanDer.. Geschrieben 29. Februar 2008 Autor Geschrieben 29. Februar 2008 Hab jetzt kurz darüber nachgedacht und festgestellt , dass das auch sehr schwierig ist. Was mache ich wenn er eine Spalte löscht ? dann wirds mit dem zurück kopieren schon mal schwierig. Wenn er eine Spalte umbennent?! und den Datentyp ändert?! Spalten verschiebt?! Das wäre ja ne Abfrageschlacht , von der ich mir nicht sicher wäre ob ich sie zu meinen Gunsten entscheiden könnte :bimei Mhhh :upps Hat nicht irgendwer Zufällig den Source Code von der Borland Datenbankoberfläche bei sich rumliegen ? :hells: Naja Danke derweilen =) Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.