![]() |
Datenbank: DB • Zugriff über: BDE
zeile immer überschrieben
morgen,
ich bin noch ein ziemlicher anfänger im bereich datenbanken, deshalb eine für euch hoffentlich einfache frage: ich speicher die auswahl meiner comboboxen in einer datenbank bei einem klick auf speichern, dass klappt auch, aber wenn ich andere werte eingebe, werden die ersten überschrieben. wie bzw. wo stelle ich ein, dass in die nächste zeile geschrieben werden soll? und, beim start meines delphi programmes werden in den comboboxen anscheinend immer die datenbankdaten eingelesen. |
Re: zeile immer überschrieben
Hallo,
ich versteh zwar nicht ganz was du meinst aber einen neuen Eintrag in eine Combobox bekommst Du mit
Code:
usw..
CBox1.items.add('Eintrag1');
Zitat:
![]() Wenn Du die DBCBox verwendest, must der DB sagen, dass ein neuer DS angelegt werden soll und nicht der DBCbox, da die Box ja nur den Inhalt des DB-Feldes wiedergibt. Zum anderen, ändere mal bitte deine Angaben im Titel. Du verwendest eine DB, dass ist aber nicht die BDE und der Zugriff erfolgt nicht über Delphi sondern über die BDE, ODBC usw.. |
Re: zeile immer überschrieben
Moing
Hilft Dir diese Zeile weiter? ComboBox1.Items.Add('text der in die combobox muss'); |
Re: zeile immer überschrieben
dann hab ich mich anscheindend schlecht ausgedrückt. also ich verwende neuerdings dbcomboboxen, das programm hab ich aber für comboboxen geschrieben. als ich die datenbank hergestellte, habe ich einfach die comboboxen gelöscht und dafür dbcomboboxen eingesetzt. das ding ist jetzt nur, dass nur eine zeile in der db gespeichert wird und das diese werte beim start in die dbcomboboxen übernommen werden.
|
Re: zeile immer überschrieben
Hallo,
das ist doch klar, die DBCBox ist doch direkt mit der DB verbunden. D.h. alle Änderung die Du in der Box tätigt werden in der DB gespeichert. Willst Du einen neuen DS anlegen, dann musst du mit "append" in der DB einen Datensatz anlegen.
Code:
Ich arbeite zwar gar nicht mit DBCbox aber Du hast im OI die Datasource sowie das Datafield mit dem entsprechenden Feld deiner DB verbunden. Wenn Du nun deine Anwendung startest sollte eigentlich nur ein Datensatz in der DBCBox eingetragen sein.
With Table1 Do
Begin Edit; Append; end; |
Re: zeile immer überschrieben
klappt irgendwie nicht mit append. ich möchte aber gerne, dass kein datensatz eingetragen ist. wenn ich nämlich was anderes anklicke ist wieder die auswahl aus'm datensatz drin.
|
Re: zeile immer überschrieben
:gruebel: Hallo,
nehme dir mal ein DBGrid und verbinde es mit deiner DB, dann wirst Du sehen, dass unten ein neuer leerer DS angelegt wird. Ich bin mir da nicht ganz sicher aber ich denke das eine DBCBox nicht vorrangig dazu gedacht ist Daten anzulegen, sondern vielmehr um diese anzuzeigen. [quote"herrentor"]das ding ist jetzt nur, dass nur eine zeile in der db gespeichert wird und das diese werte beim start in die dbcomboboxen übernommen werden. [/quote] Das ist ist der Sinn der DBCBox, Daten aus der DB anzuzeigen. Was willst du den genau machen, einmal heißt es, dass die Daten beim anlegen immer wieder überschrieben werden. Beim nächtsen Post sollen die Daten nicht in die DBCBox geladen werden. Also was genau willst Du erreichen? :gruebel: Was ich bisher verstanden habe. Du hast ein DBCBox was Daten aus der DB anzeigt. Dann willst Du in die DBCBox etwas eintragen und es soll als neuer DS in der DB Gespeichert werden. Stimmt das soweit? |
Re: zeile immer überschrieben
mein ziel ist es, daten aus den comboboxen und editfeldern in einer datenbank zu speichern, bei der ich dann die eingaben abgleichen kann. beispielsweise das keine zeile doppelt geschrieben wird. mehr will ich nicht. ich will auch nicht, dass die datensätze in meinem programm angezeigt werden.
|
Re: zeile immer überschrieben
Das Beispiel von Albi ist nicht ganz korrekt. Das"Edit" musst du weg lassen.
Außerdem gibt es Probleme mit dem Append, wenn du direkt danach den Focus wechselst. Dann geht manchmal die Table ausdem Append-Modus wieder raus. Also erst den Focus auf das Element setzen (dbcombobox.SetFocus) und dann das Append machen. Es gibt noch andere Lösungswege, aber im Moment sollte das reichen. |
Re: zeile immer überschrieben
ich verstehe gerade nicht, warum man den focus auf die dbcombobox soll? bisher hab ich nur bei der prozedur onclick tabel1.post reingeschrieben. kann man ihm nicht sagen, dass er das ende der datei suchen soll und dann schreiben?
|
Re: zeile immer überschrieben
Das Append hängt einen "vorläufigen" Datensatz an die Tabelle an.
Leider gibt es manchmal mit der TTable-Komponente Probleme, wenn direkt nach dem Append der Focus gewechselt wird. Den genauen Hintergrund kenn ich nicht, aber das Phänomen hatte ich in einem meiner alten Programme. Deswegen VOR dem Append, ein SetFocus auf ein Erfassungs-Feld machen. Wenn alle Daten eingetragen sind, erst dann darfst du ein Post machen. NICHT bei einem OnClick der dbComboBox. Dafür bitte einen extra-Button machen. Zum Testen kannst du ja auch mal den TDBNavigator benutzen. |
Re: zeile immer überschrieben
ich meinte auch nicht onclick bei der dbcombo sondern bei einem extra button. wie kann ich denn unterdrücken, dass der datensatz immer in den dbcombos angezeigt wird und soll der focus auf ein imaginäres feld?
|
Re: zeile immer überschrieben
Zitat:
Das mit dem Unterdrücken verstehe ich nicht ganz. Ein Beispiel mit dem Focus-Problem: Angenommen, du zeigst die Daten in einem DBGrid an und du bist gerade im DBGrid (Focus is dort). Dann teilst du dem Programm mit, dass ein neuer Datensatz erfasst werden soll (Append). Bis dahin funktioniert das alles noch. Jetzt klickst du eine Komponente an, in der du die neuen daten erfassen willst (z.B. DBComboBox, DBEdit,...). Dann interpretiert die TTable das als Erfassungs-Abbruch. Um das zu vermeiden musst du vor dem Append den Focus auf eines der Erfassungs-Elemente setzen. Nichts imaginäres. |
Re: zeile immer überschrieben
Hallo,
Zitat:
ich habe lange nicht mehr mit Table-Kompos gearbeitest, daher mal ein Bsp. mit Query's
SQL-Code:
Mit der Table Kompo sollte es mit Befehl Locate funktionieren.
Select Feld From DB WHERE Feld like Edit1.Text
If Query1.RecordCount-1 = 0 Then Begin //neues DS anlegen Query1.append; end else begin //DS editieren Query1.Edit; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 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 by Thomas Breitkreuz