Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Probleme mit DBGrid aktualisierung.. (https://www.delphipraxis.net/53329-probleme-mit-dbgrid-aktualisierung.html)

SKolberg 14. Sep 2005 10:41

Datenbank: MySQL • Version: 4.1.9 • Zugriff über: ZEOSLib

Probleme mit DBGrid aktualisierung..
 
Hallo,

ich habe ein Problem mit einem DBGrid. Ich zeige über ein DBGrid Datensätze in einem seperatem Formular an in dem ich die Datensätze ändern und neue hinzufügen kann, beim OnActivate es DBGrid.Form habe ich ein refresh eingesetzt damit er bearbeitete Datensätze mit den aktualisierten Daten anzeigt. Allerdings zeigt er mir nicht die neu erstellen Datensätze an, nicht einmal nach einem Neustart, obwohl die Daten in der DB liegen (überprüft).... :gruebel: Woran könnte das liegen??

Das DBGrid greift auf eine DataSource zu welche mit einer ZQuery verbunden ist die Direkt über die ZConnection geht.

Hier mal die Grundfunktionen...
Delphi-Quellcode:
//-------------------------On Form Create---------------------------------------//
procedure TForm1.FormCreate(Sender: TObject);
begin
  with ZQuery1 do
  begin
    Close;
    SQL.Text := 'SELECT * FROM munitionsdatenblatt WHERE MAT LIKE :MAT AND ArtBez LIKE :Artikel AND ModBez LIKE :Modell AND VerZw LIKE :Verwendung';
    ParamCheck := True;
    ParamByName('MAT').AsString := '%';
    ParamByName('Artikel').AsString := '%';
    ParamByName('Modell').AsString := '%';
    ParamByName('Verwendung').AsString := '%';
    Open;
    Label3.Caption:= 'Anzahl Datensätze ' + IntToStr(ZQuery1.RecordCount);
end;
end;
//-------------------------Verwendung Changed-----------------------------------//
procedure TForm1.VerwendungChange(Sender: TObject);
begin
  if MATKlasse.Text = '<Alle>' then
  MATStr:= ''
else
  MATStr:= MATKlasse.Text;
begin
  ZQuery1.ParamByName('MAT').AsString := MATStr + '%';
  ZQuery1.ParamByName('Modell').AsString := '%' + Modell.Text + '%';
  ZQuery1.ParamByName('Artikel').AsString := '%' + Artikel.Text + '%';
  ZQuery1.ParamByName('Verwendung').AsString := '%' + Verwendung.Text + '%';
  ZQuery1.Refresh;
  Label3.Caption:= 'Anzahl Datensätze ' + IntToStr(ZQuery1.RecordCount);
end;
end;
//-------------------------ONFORM GET FOCUS-------------------------------------//
procedure TForm1.FormActivate(Sender: TObject);
begin
    ZQuery1.Refresh;       // REFRESH GRID FOR GETTING CHANGED DATASETS
end;

Mfg, Steve

Sharky 14. Sep 2005 10:45

Re: Probleme mit DBGrid aktualisierung..
 
Hast Du RequestLive auf True stehen?

SKolberg 14. Sep 2005 10:50

Re: Probleme mit DBGrid aktualisierung..
 
Ja..

Cached Updates := False

Mfg, Steve


Die Änderungen zeigt er an aber nur halt nicht die neu eingetragenen..

SKolberg 14. Sep 2005 12:28

Re: Probleme mit DBGrid aktualisierung..
 
So hab natürlich weitergetestet und bemerkt das er mir sowieso nicht alle Datensätze anzeigt und zwar jene die nicht ALLE Felder:

Delphi-Quellcode:
    ParamByName('MAT').AsString := '%';
    ParamByName('Artikel').AsString := '%';
    ParamByName('Modell').AsString := '%';
    ParamByName('Verwendung').AsString := '%';
ausgefüllt haben, ist ein Feld leer zeigt er den Datensatz erst garnicht an...

Mfg, Steve

marabu 14. Sep 2005 12:38

Re: Probleme mit DBGrid aktualisierung..
 
Hi Steve,

du bist ein NULL Opfer.

Wenn die Spalten kein NOT NULL constraint besitzen, dann muss die Logik für dein SELECT statement etwas aufgerüstet werden. Wenn kein Suchbegriff für "Verwendung" eingegeben wurde, dann entferne die expression "verwendung = '%'" aus dem statement.

marabu

dfried 14. Sep 2005 12:47

Re: Probleme mit DBGrid aktualisierung..
 
Zitat:

Zitat von marabu
Wenn kein Suchbegriff für "Verwendung" eingegeben wurde, dann entferne die expression "verwendung = '%'" aus dem statement.

Oder bau in das Statement IFNULL-Bedingungen ein.

SKolberg 14. Sep 2005 13:12

Re: Probleme mit DBGrid aktualisierung..
 
Das problem ist wenn ich '%' weglasse er nur am Anfang der Bezeichnung sucht und nicht innerhalb der Bezeichnung.

IFNULL habe ich mir hier gerade angeguckt allerdings müsste man ihm doch einfacher sagen können das er alles ausspuckt, ob NOTNULL oder NULL??!

EDIT:// Für den Fall das es nicht ohne IFNULL geht, hat dann jemand einen Link parat auf dem es genau beschrieben wird?

Mfg, Steve

dfried 14. Sep 2005 13:22

Re: Probleme mit DBGrid aktualisierung..
 
Zitat:

Zitat von SKolberg
Das problem ist wenn ich '%' weglasse er nur am Anfang der Bezeichnung sucht und nicht innerhalb der Bezeichnung.

marabu meinte glaub ich eher, den SQL anzupassen und die Bedingung gar nicht abzufragen. Dann kannst du halt nicht mehr so einfach mit ParamByName arbeiten

Zitat:

Zitat von SKolberg
IFNULL habe ich mir hier gerade angeguckt allerdings müsste man ihm doch einfacher sagen können das er alles ausspuckt, ob NOTNULL oder NULL??!

Leider nicht, NULL-Werte werden halt generell immer ein bisserl anders behandelt von den Datenbanken. :)

marabu 14. Sep 2005 13:32

Re: Probleme mit DBGrid aktualisierung..
 
Du sollst nicht das % weglassen, sondern den ganzen Teilausdruck wenn er nicht bestückt wird. Schau mal:

Delphi-Quellcode:
begin
  with Query do begin
    SQL.Text := 'SELECT * FROM munitionsdatenblatt WHERE 1 = 0';
    if VerwendungEdit.Text <> '' then begin
      SQL.Add(' or a like :verwendung');
      ParamByName('verwendung').AsString := '%' + VerwendungEdit.Text + '%'
    end;
    // weitere Parameter hier ...
    Open;
  end;
end;
marabu

Jelly 14. Sep 2005 13:35

Re: Probleme mit DBGrid aktualisierung..
 
Oder anstatt dein SQL Statement Stück für Stück aufzubauen, kann man bei der ZeosLib auch MacroByName verwenden. Hat den gleichen Effekt, sieht aber übersichtlicher aus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:01 Uhr.
Seite 1 von 3  1 23      

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