Zum Inhalt springen

Datenbankprogrammierung in C++


aLeXanDer..

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 =)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

:D 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

B) Es doch schon die von Dir erwähnt Borland Datenbankoberfläche gibt?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 =)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...