Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Lesen aus Tabellenspalten (https://www.delphipraxis.net/128706-lesen-aus-tabellenspalten.html)

MCFEED 4. Feb 2009 11:15

Datenbank: SQL Server 2005 • Version: 2005 • Zugriff über: ODBC

Lesen aus Tabellenspalten
 
Schönen Guten Tag an alle,

Leider konnte ich nicht alles in die Überschrift reinschreiben(wär zu lang geworden).
Und zwar: Ich möchte gerne meine zukünftigen Daten von einer Tabellenspalte zu einer anderen "umleiten", also z.B. ich habe eine Tabelle XTERMIN, und eine XVORGANG. Bei XTERMIN gibts eine Spalte namens Vorgang_ID, und bei XVORGANG gibts eine Spalte _BEMERKUNG. Soviel dazu...
Ich will aber die "zukünftigen" daten in _BEMERKUNG(XVORGANG) in die Spalte Vorgang_ID (XTERMIN) haben.
Kann mir jemand vielleicht einen Denkanstoß geben, wie ich das anstellen könnte? Wie ich die Daten dann aus dem Vorgang_ID in mein Stringgrid kriege, weiss ich ja ,aber das kommt ja erst danach... :-D


Wäre über jede Antwort froh

MFG MCFEED

Edit: Kann ich das über Select auch machen? Oder eher nich?

angos 4. Feb 2009 13:10

Re: Lesen aus Tabellenspalten
 
hi,

so wirklich verstanden habe ich nicht was du willst, aber wenn du daten von einer tabelle in eine andere Kopieren willst dürfte das mit einem insert gehen.

Aber erkläre doch mal, was du grundsätzlich vorhast, also quasi ohne die technische umsetzung die du schon in deinem Kopf hast ;)

Gruß

MCFEED 4. Feb 2009 13:33

Re: Lesen aus Tabellenspalten
 
Grüße Angos,

Hab ich mich so umständlich ausgedrückt? :oops:
Sorry, naja grundsätzlich will ja einfach nur meinem Programm sagen das es die zukünftigen Benutzerdaten aus Bemerkung in die Spalte bemerkung in meinem Stringgrid wieder ausgibt.

Hab ein Editfeld Bemerkung wo die gleichnamigen sachen halt reinkommen. Das Problem dabei aber ist, dass das Feld Bemerkung bei mir in der Tabelle Vorgang ist , und mein Stringgrid aber bis jetzt nur Spalten aus der Tabelle Termin nutzt(Mitarbeiter, Kunde usw is da drin).

Ich will aber auch die Bemerkung haben verstehst du?Damit ich diese wieder im Anschluss sobald das was ich in mein Editfeld eingegeben habe, in meinem Stringgrid erscheint und von da über ein Onklickereignis wieder in das Editfeld ausgeben wird.

Das mit dem Ausgeben ins Editfeld hab ich schon bei den anderen gemacht, kein Ding. Hab aber kein Plan wie ich SQL/bzw Delphi sage das er die Spalte Bemerkung(VORGANG) mit meinem Editfeld Bemerkung verbinden soll. :gruebel:

ps.: Insert? Hmmm.. ja könnte klappen, danke


MFG MCFEED

MCFEED 4. Feb 2009 13:45

Re: Lesen aus Tabellenspalten
 
Achso zum besseren Verständnis:

Ich erstelle gerade ein Ausgangsbuch für Mitarbeiter, sprich wo sie sich abmelden können. Auf meiner Form sin halt editfelder(logisch?!)und in diese wird halt so gut wie alles eingetragen(bis auf ComboBox-Felder). Dise eingaben gehen an meine Tabellen im SQL server. Dieser gibt sie an mein Striggrid weiter, da dort alles angezeigt wird(Mitarbeiter;Abmeldung-Wann?;Rückkehr usw).

Am Ende kann man auf ein Datensatz im Stringgrid klicken und dieser erscheint, so wie ich ihn eingegeben habe wieder in den darunter liegenden Editfeldern .

Bemerkung(edit) is halt eins davon. Hab dazu auch passendes gegenstück Bemerkung in Tabelle Vorgang und Spalte Bemerkung in Stringgrid. Im Prinzip: Editfeld->Datenbank->Stringgrid->Editfeld.

MFG MCFEED

PS: Kann auch mal ein bissel Quellcode reinstellen, wenn du willst, damit du siehst was ich meine.

angos 4. Feb 2009 13:47

Re: Lesen aus Tabellenspalten
 
hi,

so kommen wir der Sache schon näher ;)

also wenn ichs richtig verstehe, willst du eigentlich nix in der db ändern, sondern nur zusätzlich mit ausgeben.

da könntest du mit einem select-statement arbeiten

SQL-Code:
Select * from Tabelle1 AS t1 
 left outer join Tabelle2 as t2 on t1.referenzfeld = t2.referenzfeld
referenzfeld ist nun das feld, welches in beiden tabellen gleich ist, also quasi die verknüpfung. in deinem Fall dürfte das Vorgang_ID sein.

Der Sql nimmt in dem Fall wie oben alle Datensätze aus Tabelle1 und sortiert die Daten von Tabelle2 hinten dran, wenn er einen passenden Datensatz in Tabelle2 findet. Findet er keinen Datensatz, so bleiben die felder einfach leer.

Option 2 wäre:
SQL-Code:
Select * from Tabelle1 AS t1 
INNER JOIN Tabelle2 as t2 on t1.referenzfeld = t2.referenzfeld
hier würden nur Datensätze bei rumkommen, welche in beiden Tabellen passende Datensätze finden


* Zu deinem letzten Eintrag: Du müsstest das oben beschriebene an der Stelle einbauen, wo der Sql-Server die Daten halt liefert. Ich weis jetzt nicht wie bei dir die Daten an das Stringgrid übergeben werden.


Gruß

MCFEED 4. Feb 2009 13:56

Re: Lesen aus Tabellenspalten
 
JOOO!! Du bist ein Genie, du weisst was ich will :thumb:

Hier zu mal Quellcode(Speicherung in Tabelle)

Delphi-Quellcode:
procedure TAusgang_SL_F.BB_SpeichernClick(Sender: TObject);
begin

  Tab_Ausgang.Append;
  //Tab_Ausgang.putfield('Termin_ID');
  Tab_Ausgang.putfield('_MA_NR1', E_Nr1.text);
  Tab_Ausgang.putfield('_MA_NR2', E_Nr2.text);
  Tab_Ausgang.putfield('_MA_NR3', E_Nr3.text);
  Tab_Ausgang.putfield('_MA_NR4', E_Nr4.text);
  Tab_Ausgang.putfield('_KZ', 1);
 // XTERMIN->VORGANG_ID->BEMERKUNG = Ausgabe Bemerkung!!!
  Tab_Ausgang.putfield('_Tag_Von', strtodatetime(E_TagVon.text));
  Tab_Ausgang.putfield('_Tag_Bis', strtodatetime(E_TagBis.text));
  Tab_Ausgang.putfield('AngelegtAm', now);
  Tab_Ausgang.putfield('AngelegtVon', global_Benutzer);
  Tab_Ausgang.putfield('BearbeitetAm', now);
  Tab_Ausgang.putfield('BearbeitetVon', Global_Benutzer);
  //        Tab_ausgang.putfield('_BEMERKUNG', E_Bemerkung.text);

  if E_KUNR.text <> ''
  then begin
    Tab_Ausgang.putfield('_ADRESSEN_NR', E_KUNR.text);
    Tab_Ausgang.putfield('_Tab_KZ', 'KU' );
  end
  else begin
    if E_LIENR.text <> ''
    then begin
      Tab_Ausgang.putfield('_ADRESSEN_NR', E_LIENR.text);
      Tab_Ausgang.putfield('_Tab_KZ', 'LI');
    end
    else begin
      if E_INTNR.text <> ''
      then begin
        Tab_Ausgang.putfield('_ADRESSEN_NR', E_INTNR.text);
        Tab_Ausgang.putfield('_Tab_KZ', 'IN');
      end
      else begin
        ShowMessage('Keine Zieladresse ausgewählt');
        exit;
      end;
    end;
  end;
  Tab_Ausgang.post;

MCFEED 4. Feb 2009 13:59

Re: Lesen aus Tabellenspalten
 
Und hier meine Anzeige davon im Stringgrid:

Delphi-Quellcode:
procedure TAusgang_SL_F.Zeige_Daten;
  var OleVariante : OleVariant;
begin
  Q_Ausgang.closesql;
  Q_Ausgang.setsqltext('select T.*, '+
                       'M.Name as Name1, M.Vorname as Vorname1 , ' +
                       'M2.Name as Name2, M2.Vorname as Vorname2,' +
                       'M3.Name as Name3, M3.Vorname as Vorname3,' +
                       'M4.Name as Name4, M4.Vorname as Vorname4,' +
                       'K.Name as Kunde, L.Name as Liefer,'+
                       'I.Name as Interess from XTermin T' + #13#10 +
                       'left outer join MitarBW M on (M.NR = T._Ma_Nr1) ' +
                       'left outer join MitarBW M2 on (M2.NR = T._Ma_Nr2) ' +
                       'left outer join MitarBW M3 on (M3.NR = T._Ma_Nr3) ' +
                       'left outer join MitarBW M4 on (M4.NR = T._Ma_Nr4) ' +
                       'left outer join Kunden K on (K.Nummer = T._Adressen_NR) ' +
                       'left outer join Liefer L on (L.Nummer = T._Adressen_NR)'+
                       'left outer join Interess I on (I.Nummer = T._Adressen_NR)'+
                       'where T._Tag_Von <= ''' +  datetimetostr(now) + ''' ' +
                       'and T._Tag_Bis >= ''' + datetimetostr(now)+ ''' ' +
                       'or ((_KZ2 = '''') or (_KZ2 is null)) ') ;
  Q_Ausgang.opensql;



  SG_Ausgang.RowCount := 2;
  Zeile_Leeren(1);

  while not Q_Ausgang.eof do
  begin
    if SG_Ausgang.Cells[1,SG_Ausgang.RowCount - 1] <> ''
    then SG_Ausgang.RowCount := SG_Ausgang.RowCount + 1;
    Zeile_Leeren(SG_Ausgang.RowCount -1);

    SG_Ausgang.Cells[0, SG_Ausgang.RowCount -1] := q_ausgang.getfield('XTermin_ID');

    SG_Ausgang.Cells[1, SG_Ausgang.RowCount -1] := Q_Ausgang.getfield('Name1') +
                                                   ', ' + Q_Ausgang.getfield('Vorname1');
    SG_Ausgang.Cells[2, SG_Ausgang.RowCount -1] := Q_Ausgang.getfield('Name2')+
                                                   ', ' + Q_Ausgang.getfield('Vorname2');
    SG_Ausgang.Cells[3, SG_Ausgang.RowCount -1] := Q_Ausgang.getfield('Name3')+
                                                   ', ' + Q_Ausgang.getfield('Vorname3');
    SG_Ausgang.Cells[4, SG_Ausgang.RowCount -1] := Q_Ausgang.getfield('Name4')+
                                                   ', ' + Q_ausgang.getfield('Vorname4');

  if uppercase(q_ausgang.getfield('_Tab_KZ')) = 'KU'
  then SG_ausgang.Cells[7, SG_Ausgang.RowCount -1] := Q_Ausgang.getfield('Kunde');

  if uppercase(q_ausgang.getfield('_Tab_KZ')) = 'LI'
  then SG_Ausgang.Cells[7, SG_Ausgang.RowCount -1] := Q_Ausgang.getfield('Liefer');

  if uppercase(q_ausgang.getfield('_Tab_KZ')) = 'IN'
  then SG_Ausgang.Cells[7, SG_Ausgang.RowCount -1] := Q_Ausgang.getfield('Interess');

  try
    OleVariante := Q_Ausgang.getfield('_Tag_Von');
    if OleVariante <> null
    then begin
      //ShowMessage(datetimetostr(Q_Ausgang.getfield('_Tag_Von')));
      SG_Ausgang.Cells[5,SG_ausgang.rowcount -1] := datetimetostr(Q_Ausgang.getfield('_Tag_Von'));
      SG_Ausgang.Cells[6,SG_Ausgang.rowcount -1] := datetimetostr(Q_Ausgang.getfield('_Tag_Bis'));
    end;
  except
    ShowMessage('Fehler' + #13#10 + Exception(ExceptObject).Message);
  end;
  Q_Ausgang.next;


  end;
 end;

shmia 4. Feb 2009 14:14

Re: Lesen aus Tabellenspalten
 
@MCFEED: Sag mal, wenn du D5 Enterprise hast, warum verwendest du dann nicht die datensensitiven Komponenten (DBEdit, DBGrid, DBNavigator,...) ?
Mit den datensensitiven Komponenten bist du ungefähr um den Faktor 10 produktiver als mit dem StringGrid.

MCFEED 4. Feb 2009 14:29

Re: Lesen aus Tabellenspalten
 
@shmia

Hehe, ja das hat mich hier schonmal jemand gefragt, kann dir nur dasselbe sagen wie ihm: Wenn der Chef(Programmierung) meint das sei für unsere Sache besser dann ist das so!!! :mrgreen:

Ne Spass mal beiseite, mit nem DBGrid hab ich aber das Problem das ich dann daten aus Datenmodul in mein grid nicht bekomme, soweit ich weiss. Und wir haben eins(DM1 ->originell? :gruebel: ).

Naja ausserdem meinte er das wir dann am Ende weniger Aufwand betreiben müssten wegen der Pflege des Programms. Von wenig Aufwand hab ich aber bis jetzt nich viel gemerkt, zu mal ich euch Recht geben muss das das DBGrid das alles automatisch gemacht hätte(füllen usw)

Bin auch erst seit ein paar wochen hier bei Delphi/bzw habe was mit Delphi zu tun, und nich sehr viel ahnung wie ich zugestehen muss. Hab bescheidenerweise nur C/C++ vorher gehabt .

MFG MCFEED

shmia 4. Feb 2009 14:46

Re: Lesen aus Tabellenspalten
 
Zitat:

Zitat von MCFEED
Wenn der Chef(Programmierung) meint das sei für unsere Sache besser dann ist das so!!!

Mein Beileid; ich kenne das Problem. :evil:
Hier ist ein Falscher System-Architekt zu Gange.
Zitat:

Zitat von MCFEED
mit nem DBGrid hab ich aber das Problem das ich dann daten aus Datenmodul in mein grid nicht bekomme, soweit ich weiss

Nein, das ist kein Problem.
Wenn man Felder anzeigen möchte, die so im Dataset nicht vorkommen, dann kommt man mit berechneten Feldern und Lookupfeldern recht weit.
Es gibt nur wenige Fälle, bei denen man besser ganz auf die datensensitiven Komponenten verzichtet.
Manche Leute haben vielleicht einmal mit den datensensitiven Komponenten eine negative Erfahrung gemacht und lehnen sie daher grundsätzlich ab.
Eine sehr dumme Einstellung, aber leider versuchen die Chefs ihren Programmierern immer wieder solchen Unsinn vorzuschreiben.

naja; weiter machen ohne mullen und knullen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:47 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz