Autor Beitrag
mi-frank
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Fr 04.11.05 16:16 
Hallo,

programmiere erst seit einigen Tage mit Delpbi und komm' einfach nicht weiter!!

Problem: Möchte meine TTable aktualisieren, aber es funktioniert einfach nicht!!

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
Sql := 'Select* From Bogen.DB where SYS = '+  frmAzubiBeurteilungsbogen.TableAzubis.FieldByName('SYS').AsString;

frmAzubiBeurteilungsbogen.SQLBogen.Sql.Clear;
frmAzubiBeurteilungsbogen.SQLBogen.Sql.Add(Sql);
frmAzubiBeurteilungsbogen.SQLBogen.Active := True;


Der SQL funktioniert!

Hoff, ihr könnt mir weiterhelfen??

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 04.11.05 18:21 
Dann erkläre jetzt bitte mal ganz genau, was du mit Aktualisieren meinst.
Ich werde aus deiner Formulierung nämlich nicht schlau.
mi-frank Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: So 06.11.05 23:38 
Versuch 2:

ich habe eine TQuery-, eine TDatasource und eine TTable-Komponenten in meinem Formular!

Mittels der TQuery-Komponenten lass ich mir mittels einer SQl-Anweisung, z.B select * from Tabelle; einen Datensatz auslesen, den ich dann an meine TTable weitergebe!

Wie kann ich nun zur laufzeit meiner TTable einen neuen Datensatz zuweisen, z.B. select* from Tabelle where Nachname='Mustermann';???


Ich hoff, dass diesmal klar ist, wo mein Problem genau liegt!!
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mo 07.11.05 09:29 
Ja, ich glaube, ich weiß jetzt, was du meinst.
Mir entzieht sich im Moment zwar der Sinn deines Vorgehens, aber ich habe da eine kleine Routine für dich:
ausblenden volle Höhe Delphi-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:
Function DBEmpty(dts : TDataSet) : Boolean; // Wird von der eigentlichen Prozedur aufgerufen.
begin
  Result := not dts.Active;
  if not Result then
  begin
    Result := dts.eof and dts.bof;
  end;
end;

// Das ist das, was du vermutlich benötigst.
// qQuelle ist dein TQuery, qZiel dein TTable.
// Wenn der Datensatz auch sofort gespeichert werden soll, musst du bei Speichern True übergeben.
procedure KopiereAktuellenDatensatzMitAppend(qQuelle, qZiel : TDataset; Speichern : Boolean);
var
  cnt : Integer;
  arr : array of variant;
begin
  if qQuelle.Active and (not DBEmpty(qQuelle)) then
  begin
    SetLength(arr, qQuelle.FieldCount);
    for cnt := 0 to qQuelle.FieldCount - 1 do
    begin
      arr[cnt] := qQuelle.Fields[cnt].AsVariant;
    end;
    qZiel.Append;
    for cnt := 0 to qZiel.FieldCount - 1 do
    begin
      qZiel.Fields[cnt].AsVariant := arr[cnt];
    end;
    if Speichern then
    begin
      qZiel.Post;
    end;
  end;
end;

Voraussetzungen für diese Prozedur:
- Die Ziel-Tabelle darf nicht ReadOnly sein.
- In qZiel müssen mindestens soviele Felder sein, wie in qQuelle.
- Die Felder sollten vom selben Typ sein. (Variant prüft den Typ nicht)
mi-frank Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Mo 07.11.05 11:30 
ich glaub, du hast mich wieder falsch Verstanden!

Ich möchte doch einfach nur zur Laufzeit meiner TTable einen neuen DS zuordnen, indem ich in meiner TQuery-Komponenten einen neuen SQL-Befehl eingebe:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
  frmMain.QueryBogen.Close;
  frmMain.QueryBogen.Sql.Clear;
  frmMain.QueryBogen.Sql.Add(Sql);
  frmMain.QueryBogen.Open;



SQL ist hier mein neuer SQL-Befehl!!

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mo 07.11.05 11:39 
Scheinbar verstehe ich dich wirklich nicht.
Irgendwo einen neuen Datensatz zuweisen heißt für mich den Datensatz in irgendeiner Form erfassen.

Wenn du mit TQuery und TTable auf die selbe DB-Tabelle zugreifst, dann würde ein Aufruf der Methode Refresh bei TTable genügen. Abr ich glaube nicht wirklich, dass du das meinst.

Da du mit Delphi (und vrmtl. auch Datenbanken) gerade erste angefangen hast, denke ich, das du einen konzeptionellen Fehler im Programm hast.
Bitte erkläre doch mal ein bisschen von dem, was du erreichen willst. Unabhängig vom aktuellen Problem.
mi-frank Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Mo 07.11.05 12:22 
Hi,

bin jetzt selbst drauf gekommen!

War echt dumm von mir! Musste einfach nur zur Laufzeit einen neuen Filter-Wert eingeben!

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
  TTable.Active := False;
  TTable.Filtered := False;
  TTable.Filter :=  'Feldname = Wert'
  TTable.Filtered := True;
  TTable.Open;


Trotzdem vielen Dank für deine Hilfe!

Hab bestimmt bald wieder ein anderes Problem

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.