Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi den aktuellen Datensatz auswählen, und ins edit einfügen?? (https://www.delphipraxis.net/37254-den-aktuellen-datensatz-auswaehlen-und-ins-edit-einfuegen.html)

The_Tremendous 3. Jan 2005 14:17


den aktuellen Datensatz auswählen, und ins edit einfügen??
 
Hi


Habe folgendes Problem.


Ich habe 2 Paradox tabellen:

Fahrzeuge (Fahrgestellnummer, Kennzeichen, ..., Anfangskilometer,...)

Fahrtenbuch(Datum, Kennzeichen, ..., Startkilometer, Endklilometer, ...)


In der Tabelle Fahrtenbuch werden alle Fahrten aller Fahrzeuge gespeichert !!

Das aktuelle Fahrzeug wird mit einer DBLookupCombo ausgewählt. Nun möchte ich die Startkilometer des Fahrzeuges automatisch in ein EditFeld einfügen.

Startkilometer ist bei Leerer Tabelle Fahrtenbuch = die Anfangskilometer des Fahrzeuges aus der Tabelle Fahrzeuge, oder

wenn ein Datensatz in der Tabelle Fahrtenbuch Vorhanden ist die letzten Endkilometer des Ausgewählten Fahrzeuges.


Wie kann ich das Programmieren??? Wäre gut, wenn ihr mir helfen könntet, hab halt noch keine Ahnung vom Programmieren.


The_Tremendous

Albi 3. Jan 2005 14:41

Re: den aktuellen Datensatz auswählen, und ins edit einfügen
 
Hallo,

sind die unterstrichenden Felder deine Primärfelder? Wenn ja dann solltest Du das in der Fahrtenbuch DB ändern, da daran kein Datensatz eindeutig identifiert werden kann.

So nun zu deiner Frage. Wenn Du mit Query arbeitest könnstest Du das darüber lösen und da du ja eh schon mit einer DBLookUpCombo arbeitest kannst Du die Verbindung zu der Fahrtenbuch DB nutzen und dir darüber das Edit füllen lassen.

Ich würde die DBLookUpCombobox durch eine normale DBComboBox ersetzen. Dann verbindest Du diese mit der Table Fahrzeuge.

Wenn Du dann eine Fahrzeug in der ComboBox auswählst, führst Du im OnChange-Ereignis eine Abfrage aus, die aus der Fahrtenbuch DB den entsprechenden Startkilometer ausliest.

SQL-Code:
Select Startkilometer From Fahrtenbuch WHERE ID = :iID
ParamByName('iID).value:= //hier kommt dann die Verbindung zur Fahrzeug DB hin (ID o.s.)
ExecSQL;
Ich kann jetzt nicht erkennen ob du eine Verbindung zur Fahrtenbuch DB hast. Ich meine ein Feld wie Fahrzeug_ID. Dies wäre die ID des Fahrzeuges.

The_Tremendous 3. Jan 2005 19:12

Re: den aktuellen Datensatz auswählen, und ins edit einfügen
 
hm, also die Tabellen sind eigentlich über das Kennzeichen verbunden.


Wie soll ich das verstehn?? also dieses ID =: iID

Zitat:

Select Startkilometer From Fahrtenbuch WHERE ID = :iID
ParamByName('iID).value:= //hier kommt dann die Verbindung zur Fahrzeug DB hin (ID o.s.)
ExecSQL;

The Tremenodus

Albi 3. Jan 2005 19:25

Re: den aktuellen Datensatz auswählen, und ins edit einfügen
 
Hallo,

was ich damit sagte wollte, du wählst ein Fahrzeug in der DBComboBox aus. In dem OnChange Ereignis führst Du den Code aus. Anstatt der ID wählst Du dann halt das Kennzeichen.

Wenn du den Code ausgeführt hast, dann steht in dem Ergebnis der entsprechende DS und somit auch der Startkilometerstand.

Um den dann noch in das Edit zu schreiben, must du nur das entsprechende Feld auslesen.

SQL-Code:
//das OnChange Ereignis
Kz: String;

Kz:= Query1.FieldByName('Kennzeichen').asstring //kennzeichen von dem Fahrzeug aus CBox
With Query1 Do
Begin
  close;
  SQL.clear;
  SQL.ADD('Select Startkilometer From Fahrtenbuch WHERE Kennzeichen LIKE '+KZ+'');
  Open;
end;

Edit.Text:= Query1.FieldByName('StartKilometer').AsString;

The_Tremendous 3. Jan 2005 23:19

Re: den aktuellen Datensatz auswählen, und ins edit einfügen
 
Das habe ich soweit jetz auch gemacht.

Wenn ich aber dann nen Datensatz in der Combo auswähle wird gesagt, das Feld Kennzeichen wurde nicht gefunden.

ich habe das query über ne datasource mit der Tabelle Fahrzeuge verbunden. Und In dieser Tabelle ist das Feld Kennzeichen definitiv drinne.


Was habe ich Falsch gemacht??


The-Tremendous

kiar 3. Jan 2005 23:22

Re: den aktuellen Datensatz auswählen, und ins edit einfügen
 
hallo,

wie heisst denn dein feld, wo das kennzeichen drin steht?

raik

The_Tremendous 3. Jan 2005 23:24

Re: den aktuellen Datensatz auswählen, und ins edit einfügen
 
Das Tabellenfeld in dem die Iennzeichen drin stehn heist Kennzeichen.

Gruß The_Tremendous

kiar 3. Jan 2005 23:28

Re: den aktuellen Datensatz auswählen, und ins edit einfügen
 
der code geht aber davon aus , das das feld in der tablle Fahrten buch steht

raik

The_Tremendous 3. Jan 2005 23:38

Re: den aktuellen Datensatz auswählen, und ins edit einfügen
 
Also ich habe die 2 Paradox Tabellen:


Fahrzeuge (Fahrgestellnummer, Kennzeichen, Anfangskilometer, ...)

Fahrtenbuch (FahrtenbuchNr, Datum, Kennzeichen, Startkilometer, Endkilometer,...)



Somit steht in jeder der beiden Tabellen das Feld Kennzeichen. Über dieses Kennzeichen sollen alle Fahrten eines Autos im Fahrtenbuch mit der Tabelle Fahrzeuge verknüpft werden.


Ich will nun die Startkilometer des Autos x beim eintragen einer Fahrt in das Fahrtenbuch automatisch ins feld editStartKilomter eingeben.

Dabei muss ich beachten, ob in der Tabelle Fahrtenbuch schon eine Fahrt vom Auto x steht oder nicht. Wenn noch keine Fahrt vom Autox in der Tabelle Fahrtenbuch steht, dann soll der wert Anfangskilometer aus der Tabelle Fahrzeuge übernommen werden.
Sollte in der Tabelle Fahrtenbuch schon Einträge des Austos x stehten, dann soll der davon letzte ausgewählt werden, und der wert des Feldes Endkilometer in das Editfeld eingetragen werden.


Das Auto wird wie oben schon erwähnt mit einer Lookupcombo ausgewählt.

Den Quellcode des Querys habe ich dann unter combolookupcloseup geschrieben, hoffe mal das das so richtig ist.


Gruß The_Tremendous

kiar 3. Jan 2005 23:41

Re: den aktuellen Datensatz auswählen, und ins edit einfügen
 
ins onchange, wie oben beschrieben.

versuche es mal

raik

The_Tremendous 3. Jan 2005 23:44

Re: den aktuellen Datensatz auswählen, und ins edit einfügen
 
onchange gibt es aber bei dblookup combos nicht, deshalb habe ich ja das closeup genommen. Meinst du das das deshalb nicht geht?? oder stimmt vielleicht was anderes nicht??


The_Tremendous

kiar 3. Jan 2005 23:50

Re: den aktuellen Datensatz auswählen, und ins edit einfügen
 
versuche mal das onexit

kiar 3. Jan 2005 23:54

Re: den aktuellen Datensatz auswählen, und ins edit einfügen
 
closeup sollte abe rauch funktionieren :gruebel:

setze mal haltepunkte auf
Delphi-Quellcode:
With Query1 Do
und gehe mal mit der maus über KZ ,was steht jetzt da drin?

raik

The_Tremendous 3. Jan 2005 23:54

Re: den aktuellen Datensatz auswählen, und ins edit einfügen
 
Er gibt jetzt zwar keinen Fehler aus, aber das EditFeld ist trotzdem noch leer. Also hat er noch nichts ausgewählt.


Gruß, The_Tremendous

*jetz ins Bettgehend und hoffend, das er morgen erfolgreicher ist :-)*

Albi 4. Jan 2005 09:51

Re: den aktuellen Datensatz auswählen, und ins edit einfügen
 
Hallo The_Tremendous,

Nutzt die Funktionen der DBLookUpComboBox? Diese DBLCBox ist ja eigentlich dazu gedacht eine 1:1 Beziehung zwischen 2 DB dazustellen. Z.Bsp. läßt man sich der Box Namen anzeigen und in einer DBGrid die dazugehörigen Daten aus einer anderen DB.

Du könntest die Box in ihrer vollen Funktionalität in deinem Fall nutzen (mir ist das aber zu kompliziert).

Ich würde die DBLookupCombobox durch eine normale DBCombobox ersetzen, da hast du dann auch ein OnChange.

Dann verknüpft Du die Datasource mit der Datasource für die DB Fahrzeuge. Nun sollten die Fahrzeuge in die DBCBox eingetragen werden. (Das kannst Du schon mal testen, wenn Du das Query auf Open True setzt)

Wenn Du jetzt ein Fahrzeug in DBCBox auswählst, wird automatisch der Datensatzzeiger auf den entsprechenden Datensatz in deiner Abfrage gesetzt. Was du setzt nur noch machen must, ist das Feld Kennzeichen aus dem Ergebnis auslesen und die 2te Abfrage übergeben und da kommt der oben beschrieben Code ins Spiel und dann sollte es eigentlich gehen.

The_Tremendous 4. Jan 2005 11:13

Re: den aktuellen Datensatz auswählen, und ins edit einfügen
 
Also ich habe jetzt die DBCombo mit der datasource2 verbunden. Die Datasource2 ist mit der Tabelle Fahrzeuge verknüpft.

Jetzt zeigt er in der Combo aber nur das erste Fahrzeug an und ich kann kein anderes auswählen.

Was stimmt da nicht???


The_Tremendous

Boombuler 4. Jan 2005 12:24

Re: den aktuellen Datensatz auswählen, und ins edit einfügen
 
Hi

Weil du das mit deiner 2. datasource verbunden hast (steht leider immer auf dem ersten datensatz... (zumindest wenn ich mir gerad den aufbau deiner form richitg vorstelle)

Greetz
Boombuler

Albi 4. Jan 2005 12:26

Re: den aktuellen Datensatz auswählen, und ins edit einfügen
 
Hallo,

ich habe das ganze mal durchgespielt. Ich habe mir allerdings ne normal CBox genommen. Dann habe ich mit dem Code

Code:
With Query1 Do
Begin
   Close;
   SQL.Clear;
   SQL.ADD('Select * From Fahrzeuge');
   SQL.Open;
   //CBox füllen
   While Not EOF Do
   Begin
      CBox.Items.add('FieldByName('Kennzeichen').asString;
      Next;
   end;
end;
im OnCreate Ereignis die Kennzeichen in die CBox geschrieben.

Zur Auswertung der CBox dann im OnChange-Ereignis den folgenden Code eintragen

Code:
var KZ: String;
begin
  KZ:= ComboBox1.Text;
  With Query2 DO
  Begin
    Close;
    SQL.Clear;
    SQL.Add('Select * From Fahrtenbuch.db WHERE Kennzeichen Like "'+KZ+'"');
    Open;
  end;
  edit1.Text:= Query2.FieldByName('Startkilometer').AsString; //Hier wird der Wert eingetragen
  ShowMessage(Query2.SQL.Text); //Nur zu Testzwecken um den Inhalt der Abfrage zu testen
end;
Bei mir hat es so einwandfrei funktioniert.

Ich hoffe das hilft Dir jetzt weiter.

The_Tremendous 4. Jan 2005 13:02

Re: den aktuellen Datensatz auswählen, und ins edit einfügen
 
Also erstmal viele Dank.

Aber:

der erste Fehler kommt bei
SQL.Open --> das Open kennt er net

der zweite Fehler liegt hier irgendwo
comboFahrzeugAuswahl.Items.add('FieldByName'('Kennzeichen').asString;

[Fehler] UFahrtenbuchEingabe.pas(72): Operator oder Semikolon fehlt
[Fehler] UFahrtenbuchEingabe.pas(72): Record, Objekt oder Klassentyp erforderlich

Das waren die Fehler. Was Ist jetzt Falsch??

Ich habe das Query1 an dei Tabelle Fahrzeuge geknüpft und das Quer2 2 an die Tabelle Fahrtenbuch. Ist das richtig so??


The_Tremendous

Albi 4. Jan 2005 13:20

Re: den aktuellen Datensatz auswählen, und ins edit einfügen
 
Also,

ich habe die TQuery Kompos aus der Sparte BDE verwendet.

zu 1., mein Fehler ohne SQL selbsverständlich

zu 2.

Zitat:

Zitat von The_Tremendous
der zweite Fehler liegt hier irgendwo
comboFahrzeugAuswahl.Items.add('FieldByName'('Kenn zeichen').asString;

es sollte so aussehen

Code:
comboFahrzeugAuswahl.Items.add(FieldByName('Kennzeichen').asString);
Das sind typische Copy & Paste Fehler.

So und nun versuch es nochmal.

Kannst Du das alles nachvollziehen was ich da überhaupt geschrieben habe oder nimmst Du das alles so hin?

The_Tremendous 4. Jan 2005 13:30

Re: den aktuellen Datensatz auswählen, und ins edit einfügen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Dei Fehler sind jetzt weg, wenn ich aber nun das Prog starten will kommt ein ErrorFenster.

Ich habe mal einen Screeshot davon gemacht, siehe Attachment:

Der Fehler kommt nach dem close;


The_Tremendous


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 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