AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Quellcode mal bitte angucken
Thema durchsuchen
Ansicht
Themen-Optionen

Quellcode mal bitte angucken

Ein Thema von Luckie · begonnen am 28. Jan 2005 · letzter Beitrag vom 29. Jan 2005
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Quellcode mal bitte angucken

  Alt 29. Jan 2005, 08:06
Zitat von Nightshade:
Ich bekomme eine AV (im Modul libmysql.dll) beim Drücken von "DB Anlegen"....
Kopiere mal die libmySQL.dll von deinem mySQL-Server in das Verzeichniss von Luckies Anwendung.

[Edit]Uff... bei mir passier ja das selbe. Muss ich mir mal ansehen
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#12

Re: Quellcode mal bitte angucken

  Alt 29. Jan 2005, 08:37
Zitat von Luckie:
... was ihr von dem Code haltet, ...
Ein kleiner Tip am Rande
Die PLZ als Integer zu speichern ist zwar effektiv. Aber (es gibt ja immer ein aber). Wenn ich eine Postleitzahl eingebe die mir 0 beginnt stimmt natürlich die Anzeige nicht mehr und auch das Suchen würde nicht sauber funktionieren. Darum würde ich da lieber ein VarChar(5) verwenden.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
runger
(Gast)

n/a Beiträge
 
#13

Re: Quellcode mal bitte angucken

  Alt 29. Jan 2005, 08:52
Hallo sharky,

erklär mal bitte für alle Ahnungslosen was ein varchar(5) ist.

Rainer
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#14

Re: Quellcode mal bitte angucken

  Alt 29. Jan 2005, 09:00
Zitat von runger:
...erklär mal bitte für alle Ahnungslosen was ein varchar(5) ist...
Hai Rainer,
das ist ein Datenbankfeld das bis zu 5 Zeichen Text auf nehmen kann.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
runger
(Gast)

n/a Beiträge
 
#15

Re: Quellcode mal bitte angucken

  Alt 29. Jan 2005, 09:02
Danke,

hab ich nicht gewusst.

Rainer
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#16

Re: Quellcode mal bitte angucken

  Alt 29. Jan 2005, 09:12
Zitat von Luckie:
... was ihr von dem Code haltet, ...
Hai Luckie,
noch zwei Anmerkungen
a)
Warum stellst Du die Verbindung zu mySQL-Server im OnPaint deiner Form her? Wäre es nicht besser das einmalig im OnCreate zu machen.

b)
Du verwendest eine Spalte deiner StringGrid zum "speichern" der ID jeder Adresse. Ich habe mir angewöhnt dafür die Eigenschaft Obejects zu missbrauchen. Diese hast Du dann nämlich auch bei TListBoxen TListViews und allem was ein TStrings Property hat.
Im OnSelectCell deines StringGrids müsstest Du das so änder:
Delphi-Quellcode:
  ID := Integer(StringGrid1.Objects[0,ARow]);
// ID := StrToIntDef(StringGrid1.Cells[0, ARow], 0);
und in deinem FillStringGrid noch das:
Delphi-Quellcode:
    StringGrid1.Objects[0,i+1] := TObject (Kontakte[i].ID);
// StringGrid1.Cells[0, i + 1] := IntToStr(Kontakte[i].ID);
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#17

Re: Quellcode mal bitte angucken

  Alt 29. Jan 2005, 10:50
Zitat von Sharky:
Warum stellst Du die Verbindung zu mySQL-Server im OnPaint deiner Form her? Wäre es nicht besser das einmalig im OnCreate zu machen.
Weil es cooler aussieht, wenn die Form schon sichtbar ist und dann erst das StringGrid gefüllt wird. Nein, ich wollte zum Debuggen de Meldungen im Memo sehen. Und außerdem wird die Verbindung ja auch nur einmal hergestellt.

Zitat:
Du verwendest eine Spalte deiner StringGrid zum "speichern" der ID jeder Adresse.
Nun ja. Das muss ich sowie so noch mal umbauen und alles dynamisch machen. Sprich die Anzahl der Spalten usw. und dabei werden wohl alle Felder der DB zu varchar Feldern werden. Ich dachte mir dann sowas:
Delphi-Quellcode:
type
  TKonatkte = array of String;
  TCols = array of String;

GetKontakte(var Kontakte: TKonatkte; var Cols: TCols);

FillStringGrid(SG: TStringGrid, Kontakte: TKontakte, Cols: TCols);
begin
  SG.Cols := length(Ciols);
  for i := 0 to length(Cols) - 1 do
  begin
    SG.Cells[0, i] := Cols[i];
  end;
  SG.Rows := length(Kontakte);
  for i := 0 to length(Kontakte) - 1 do
  begin
    ....;
    ....;
  end;
end;
Dann kann man das für jede beliebige Datenbank einsetzten.

Denn wenn ich jetzt so was mache:
SELECT name, vorname FROM kontakte dann stürzt mit alles ab. Da muss ich noch eine universelle Lösung finden
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#18

Re: Quellcode mal bitte angucken

  Alt 29. Jan 2005, 15:51
So, hier du Umsetzung:
Delphi-Quellcode:
type
  TRows = array of array of string; // [Cols, Rows]
  TCols = array of string;

function ExecQuery(const query: string; var Cols: TCols; var Rows: TRows):
  Boolean;
var
  MySQLRes : PMYSQL_RES;
  MySQLRow : PMYSQL_ROW;
  AffectedRows : Int64;
  ColCount : Cardinal;
  Field : PMYSQL_FIELD;
  i : Integer;
  j : Integer;
  ErrorCode : Integer;
begin
  ErrorCode := mysql_select_db(Descriptor, DBNAME);
  if ErrorCode = 0 then
  begin
    ErrorCode := mysql_real_query(Descriptor, PChar(query), length(query));
    if ErrorCode = 0 then
    begin
      MySQLRes := mysql_store_result(Descriptor);
      if Assigned(MySQLRes) then
      begin
        ColCount := mysql_num_fields(MySQLRes);
        SetLength(Cols, ColCount);
        for i := 0 to ColCount - 1 do
        begin
          Field := mysql_fetch_field_direct(MySQLRes, i);
          Cols[i] := Field.Name;
        end;
        AffectedRows := mysql_affected_rows(Descriptor);
        SetLength(Rows, ColCount, AffectedRows);
        for i := 0 to ColCount - 1 do
        begin
          for j := 0 to AffectedRows - 1 do
          begin
            MySQLRow := mysql_fetch_row(MySQLRes);
            Rows[i, j] := MySQLRow[i];
          end;
          mysql_real_query(Descriptor, PChar(query), length(query));
          MySQLRes := mysql_store_result(Descriptor);
        end;
        log(Format('Betroffene Zeile: %d', [mysql_affected_rows(Descriptor)]));
        mysql_free_result(MySQLRes);
      end
    end
  end;
  result := ErrorCode = 0;
end;

procedure FillGrid(SG: TStringGrid; Cols: TCols; Rows: TRows);
var
  i, j : Integer;
begin
  SG.ColCount := 0;
  SG.RowCount := 0;
  if Assigned(Rows) then
  begin
    SG.RowCount := length(Rows[0]);
    SG.ColCount := length(Cols);
    SG.FixedRows := 1;
    for i := 0 to length(Cols) - 1 do
    begin
      SG.Cols[i].Add(Cols[i]);
      SG.Cells[i, 0] := Cols[i];
    end;
    for i := 0 to length(Cols) - 1 do
    begin
      for j := 0 to length(Rows[0]) - 1 do
      begin
        SG.Cells[i, j + 1] := Rows[i, j];
      end;
    end;
  end;
end;
Und ein Aufruf könnte so aussehen:
Delphi-Quellcode:
if ExecQuery(query, Cols, Rows) then
  FillGrid(StringGrid1, Cols, Rows)
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#19

Re: Quellcode mal bitte angucken

  Alt 29. Jan 2005, 17:02
375 Aufrufe! Liegt das jetzt an mir oder an dem Thema?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Generalissimo

Registriert seit: 28. Aug 2003
187 Beiträge
 
Delphi 6 Enterprise
 
#20

Re: Quellcode mal bitte angucken

  Alt 29. Jan 2005, 17:12
Zitat von runger:
Hallo sharky,

erklär mal bitte für alle Ahnungslosen was ein varchar(5) ist.

Rainer
Genauer ein Textfeld mit variabler Länge bis 5. Werden hier nur 3 Textzeichen eingegeben werden auch nur für 3 Zeichen Speicher benutzt. Char(5) bedeutet das immer für 5 Zeichen Speicher besetzt wird.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:54 Uhr.
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