Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Sql insert into (https://www.delphipraxis.net/203708-sql-insert-into.html)

Delphi.Narium 28. Mär 2020 14:48

AW: Sql insert into
 
Dashier ist zwar schon was älter, sollte vom Prinzip her aber funktionieren: http://www.teechart.net/docs/teechar...l/manu2l4k.htm

Statt der dort genannten Tabelle nimmst Du halt die ADOQuery, mit der Du bisher Deine Abfragen machst.

Geht natürlich auch über Label und Progressbar.

Dann muss Du Dein Select ausführen und für jede Zeile des Ergebnisses ein Label und eine Progressbar erstellen.

Ohne die genaue Aufgabenstellung zu kennen, ohne die Dir vorgegebenen Rahmenbedingungen zu kennen, wird es aber schwierig hier 'nen sinnvoll zu verwertenden Beispielcode zu erstellen oder auch nur Hinweise zu Lösungsmöglichkeiten zu geben.

Never01 28. Mär 2020 18:44

AW: Sql insert into
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1460713)
Dashier ist zwar schon was älter, sollte vom Prinzip her aber funktionieren: http://www.teechart.net/docs/teechar...l/manu2l4k.htm

Statt der dort genannten Tabelle nimmst Du halt die ADOQuery, mit der Du bisher Deine Abfragen machst.

Geht natürlich auch über Label und Progressbar.

Dann muss Du Dein Select ausführen und für jede Zeile des Ergebnisses ein Label und eine Progressbar erstellen.

Ohne die genaue Aufgabenstellung zu kennen, ohne die Dir vorgegebenen Rahmenbedingungen zu kennen, wird es aber schwierig hier 'nen sinnvoll zu verwertenden Beispielcode zu erstellen oder auch nur Hinweise zu Lösungsmöglichkeiten zu geben.

Dankeschön

Ich habe meiner Version leider kein TDBchart...

Zur Aufgabenstellung:

'Die existiert nicht'. Ich soll lediglich verschiedene Auswertungsmöglichkeiten anbieten. Aber da ist nichts vorgegeben. Deshalb frage ich euch ja, da evtl. von euch mir jemand helfen kann.
Was ich möchte: Im Diagramm soll angezeigt werden, wie oft ein Spieler das erste, zweite und dritte Spiele gegen den selben Spieler gewonnen hat. Ich hoffe, ich habe mich diesmal besser ausgedrückt:oops:

Delphi.Narium 28. Mär 2020 19:12

AW: Sql insert into
 
Bevor Du Dir Gedanken machst, wie Du das Ergebnis darstellen kannst, versuch bitte erst einmal ein Select zu bauen, das Dir das gewünschten Ergebnis liefert.

Wenn Du das hast, poste es bitte hier, dann kann man sich Gedanken machen, ob und wie das grafisch darstellen werden kann.

(Wenn es um mehrere Auswertungen geht, kannst Du natürlich auch mehrere Selects erstellen und diese hier posten.)

Welche Delphiversion hast Du eigentlich?

Never01 29. Mär 2020 13:22

AW: Sql insert into
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1460727)
Bevor Du Dir Gedanken machst, wie Du das Ergebnis darstellen kannst, versuch bitte erst einmal ein Select zu bauen, das Dir das gewünschten Ergebnis liefert.

Wenn Du das hast, poste es bitte hier, dann kann man sich Gedanken machen, ob und wie das grafisch darstellen werden kann.

(Wenn es um mehrere Auswertungen geht, kannst Du natürlich auch mehrere Selects erstellen und diese hier posten.)

Welche Delphiversion hast Du eigentlich?

Ich verwende Delphi7, allerdings sind da nicht alle Mittel installiert.

Ich weiß leider nicht, was du mit den Select meinst. Mein Problem ist ja, dass ich gar nicht weiß, wie das überhaupt geht. Es tut mir leid, aber wir wurden völlig ins kalte Wasser geschmissen.

Delphi.Narium 29. Mär 2020 14:19

AW: Sql insert into
 
Weiter oben hast Du geschrieben, dass Du schon Auswertungen hast.

Wie machst Du die denn?

In Post 37 und 39 dieses Threads stehen doch schon Selectanweisungen, kurz Selects.

Never01 29. Mär 2020 14:27

AW: Sql insert into
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1460751)
Weiter oben hast Du geschrieben, dass Du schon Auswertungen hast.

Wie machst Du die denn?

In Post 37 und 39 dieses Threads stehen doch schon Selectanweisungen, kurz Selects.

Delphi-Quellcode:
begin          //Suchen des Siegers
datamodule3.ADOQuery3.Close;
  datamodule3.ADOQuery3.SQL.Text:='select Sieger_NN, Spieler1nn, Spieler1vn, Spieler2nn, Spieler2vn, Punktestand1, Punktestand2, Punktestand3 from Spiel where Sieger_NN = :sp1nn6 ';
  datamodule3.ADOQuery3.Parameters.ParamByName('sp1nn6').Value := edsp1nn6.Text;
  datamodule3.ADOQuery3.Open;
  TstringGrid(DBGrid1).DefaultColWidth:=100;

end;
und

Delphi-Quellcode:
begin

  if (edsp1nn5.Text='') or  (edsp1vn5.Text='')
  then begin
       showmessage ('Daten eingeben') ;
       end
       else begin
                                   // Suchen eines Spielers
datamodule3.ADOQuery3.Close;
  datamodule3.ADOQuery3.SQL.Text:='select Spieler1nn,Spieler1vn,Spieler2nn,Spieler2vn, Punktestand1, Punktestand2, Punktestand3, Sieger_NN from Spiel where Spieler1vn = :sp1vn5 and Spieler1nn = :sp1nn5 or (Spieler2vn = :sp2vn5 and Spieler2nn = :sp2nn5)';
  datamodule3.ADOQuery3.Parameters.ParamByName('sp1vn5').Value := edsp1vn5.Text;
  datamodule3.ADOQuery3.Parameters.ParamByName('sp1nn5').Value := edsp1nn5.Text;
  datamodule3.ADOQuery3.Parameters.ParamByName('sp2vn5').Value := edsp1vn5.Text;
  datamodule3.ADOQuery3.Parameters.ParamByName('sp2nn5').Value := edsp1nn5.Text;
  datamodule3.ADOQuery3.Open;
  TstringGrid(DBGrid1).DefaultColWidth:=90;

            end;
end;

Sorry für die Dusseligkeit.

Delphi.Narium 29. Mär 2020 16:04

AW: Sql insert into
 
Zitat:

Zitat von Never01
Was ich möchte: Im Diagramm soll angezeigt werden, wie oft ein Spieler das erste, zweite und dritte Spiele gegen den selben Spieler gewonnen hat.

Du möchtest also das oben beschriebene "irgendwie" grafisch darstellen.

Bei genauerer Überlegung scheint mir das bei dem vorliegenden Datenmodell, also der vorliegenden Art der Daten und deren Gestaltung, nicht wirklich (mit vertretbarem Aufwand) möglich.

Da der Punktestand nicht für Gewinner und Verlierer separat gespeichert ist, sondern in der Form Gewinner:Verlierer (also z. B. 1:0) muss man bei einer Auswertung erstmal die Datenbankinhalte aufteilen.

Meine Kenntnisse bezüglich Access sind nicht ausreichend, um hier einen halbwegs sinnvollen Lösungsbeitrag zu liefern. Datenbankseitig sehe ich momentan keine Lösungsmöglichkeit, die lesbar und verständlich wäre. Hier wären schon sehr fundierte Kenntnisse in der SQL-Variante von Access nötig.

Es bliebe also noch die Möglichkeit, die Auswertung innerhalb von Delphi vorzunehmen.

Dazu sollte eine Abfrage in dieser Form ausreichen:

Delphi-Quellcode:
datamodule3.ADOQuery3.SQL.Text:='select Spieler1nn, Spieler1vn, Spieler2nn, Spieler2vn, Punktestand1, Punktestand2, Punktestand3, Sieger_NN from Spiel where (Spieler1vn = :sp1vn5 and Spieler1nn = :sp1nn5) and (Spieler2vn = :sp2vn5 and Spieler2nn = :sp2nn5)';


Danach müsstest Du das Ergebnis in einer Schleife abarbeiten und für jeden Datensatz prüfen, welcher Spieler welches Spiel gewonnen hat (also die Punktstände prüfen) und abhängig vom Ergebnis zählen.

Sowas in der Art (wobei das weder geprüft noch korrektes Delphi ist, sondern nur 'ne hingedaddelte Idee)
Delphi-Quellcode:
const
  csCaption = 'Spieler %d hat Spiel %d %d mal gewonnen.';
var
  Punktestand : String;
  PunkteSpieler1 : Integer;
  PunkteSpieler2 : Integer;
  GewinnSpiel1_Spieler1 : Integer;
  GewinnSpiel1_Spieler2 : Integer;
  GewinnSpiel2_Spieler1 : Integer;
  GewinnSpiel2_Spieler2 : Integer;
  GewinnSpiel3_Spieler1 : Integer;
  GewinnSpiel3_Spieler2 : Integer;
begin
  GewinnSpiel1_Spieler1 := 0;
  GewinnSpiel1_Spieler2 := 0;
  GewinnSpiel2_Spieler1 := 0;
  GewinnSpiel2_Spieler2 := 0;
  GewinnSpiel3_Spieler1 := 0;
  GewinnSpiel3_Spieler2 := 0;

  datamodule3.ADOQuery3.SQL.Text:='select Spieler1nn, Spieler1vn, Spieler2nn, Spieler2vn, Punktestand1, Punktestand2, Punktestand3, Sieger_NN from Spiel where (Spieler1vn = :sp1vn5 and Spieler1nn = :sp1nn5) and (Spieler2vn = :sp2vn5 and Spieler2nn = :sp2nn5)';
  // ---------------------------------------------
  // Hier noch die Parameter der Abfrage befüllen.
  // ---------------------------------------------
  datamodule3.ADOQuery3.Open;
  while not datamodule3.ADOQuery3.EoF do begin
    // Hier jetzt die Punktstände auswerten:
    // Punktestand 1
    Punktestand   := datamodule3.ADOQuery3.FieldByName['Punktestand1').AsString;
    PunkteSpieler1 := StrToInt(Copy(Punktestand,1,Pos(':',Punktestand) - 1));
    PunkteSpieler2 := StrToInt(Copy(Punktestand,Pos(':',Punktestand) + 1,Lenght(Punktestand)));
    if PunkteSpieler1 > PunkteSpieler2 then GewinnSpiel1_Spieler1 := GewinnSpiel1_Spieler1 + 1;
    if PunkteSpieler1 < PunkteSpieler2 then GewinnSpiel1_Spieler2 := GewinnSpiel1_Spieler2 + 1;
    // Punktestand 2
    Punktestand   := datamodule3.ADOQuery3.FieldByName['Punktestand2').AsString;
    PunkteSpieler1 := StrToInt(Copy(Punktestand,1,Pos(':',Punktestand) - 1));
    PunkteSpieler2 := StrToInt(Copy(Punktestand,Pos(':',Punktestand) + 1,Lenght(Punktestand)));
    if PunkteSpieler1 > PunkteSpieler2 then GewinnSpiel2_Spieler1 := GewinnSpiel2_Spieler1 + 1;
    if PunkteSpieler1 < PunkteSpieler2 then GewinnSpiel2_Spieler2 := GewinnSpiel2_Spieler2 + 1;
    // Punktestand 3
    Punktestand   := datamodule3.ADOQuery3.FieldByName['Punktestand3').AsString;
    PunkteSpieler1 := StrToInt(Copy(Punktestand,1,Pos(':',Punktestand) - 1));
    PunkteSpieler2 := StrToInt(Copy(Punktestand,Pos(':',Punktestand) + 1,Lenght(Punktestand)));
    if PunkteSpieler1 > PunkteSpieler2 then GewinnSpiel3_Spieler1 := GewinnSpiel3_Spieler1 + 1;
    if PunkteSpieler1 < PunkteSpieler2 then GewinnSpiel3_Spieler2 := GewinnSpiel3_Spieler2 + 1;
    datamodule3.ADOQuery3.Next;
  end;
  // Hier haben wir jetzt sechs Zahlen als Ergebnis, die ggfls. mit TLabel oder TProgressbar
  // ausgegeben werden können. (lbSpiel... = TLabel, pgSpiel... = TProgressbar)
  lbSpiel1_Spieler1.Caption := Format(csCaption, [1,1,GewinnSpiel1_Spieler1]);
  lbSpiel1_Spieler2.Caption := Format(csCaption, [2,1,GewinnSpiel1_Spieler2]);
  lbSpiel2_Spieler1.Caption := Format(csCaption, [1,2,GewinnSpiel2_Spieler1]);
  lbSpiel2_Spieler2.Caption := Format(csCaption, [2,2,GewinnSpiel2_Spieler2]);
  lbSpiel3_Spieler1.Caption := Format(csCaption, [1,3,GewinnSpiel3_Spieler1]);
  lbSpiel3_Spieler2.Caption := Format(csCaption, [2,3,GewinnSpiel3_Spieler2]);
  pgSpiel1_Spieler1.Position := GewinnSpiel1_Spieler1;
  pgSpiel1_Spieler2.Position := GewinnSpiel1_Spieler2;
  pgSpiel2_Spieler1.Position := GewinnSpiel2_Spieler1;
  pgSpiel2_Spieler2.Position := GewinnSpiel2_Spieler2;
  pgSpiel3_Spieler1.Position := GewinnSpiel3_Spieler1;
  pgSpiel3_Spieler2.Position := GewinnSpiel3_Spieler2;
  pgSpiel1_Spieler1.Max := datamodule3.ADOQuery3.RecordCount;
  pgSpiel1_Spieler2.Max := pgSpiel1_Spieler1.Max;
  pgSpiel2_Spieler1.Max := pgSpiel1_Spieler1.Max;
  pgSpiel2_Spieler2.Max := pgSpiel1_Spieler1.Max;
  pgSpiel3_Spieler1.Max := pgSpiel1_Spieler1.Max;
  pgSpiel3_Spieler2.Max := pgSpiel1_Spieler1.Max;
end;
In den Variabeln GewinnSpiel1_Spieler1 bis GewinnSpiel3_Spieler2 sollte nun stehen, welcher der beiden ausgewerteten Spieler welches Spiel wie oft gewonnen hat.

Habe keine Ahnung, ob das jetzt ein wirklich sinnvoller Ansatz ist. Mir erscheint er unnützt kompliziert.

Da die Aufgabenstellung wohl leider eher diffus zu sein scheint und ich keine Ahnung habe, welche Delphi- und welche Datenbankkenntnis als gegeben vorausgesetzt werden können, ist eine sinnvolle Hilfestellung leider kaum möglich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:33 Uhr.
Seite 5 von 5   « Erste     345   

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