Delphi-PRAXiS

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.

SKolberg 14. Sep 2005 13:40

Re: Probleme mit DBGrid aktualisierung..
 
Danke @ALL

werde es heute Abend mal mit beiden Varianten ausprobieren.
Gerade keine Zeit...

Mfg, Steve

SKolberg 15. Sep 2005 07:48

Re: Probleme mit DBGrid aktualisierung..
 
Danke erst nochmal, habe es gestern Abend ausprobiert und funktioniert wunderbar (Methode von Marabu).

Mal eine grundsätzlich Frage: Wieso gibt er denn die Null-Felder nicht aus? Normalerweise dürfte ihn das doch garnicht interessieren... Wenn ich ein Suchfeld leer lasse, Null ist doch "leer"??! Oder als was gibt der SQL ein Null-Feld aus?


Mfg, Steve

Sharky 15. Sep 2005 07:58

Re: Probleme mit DBGrid aktualisierung..
 
Zitat:

Zitat von SKolberg
... Null ist doch "leer"??! Oder als was gibt der SQL ein Null-Feld aus?

Genau das ist es nicht. Ein Feld mit dem "Inhalt" NULL ist nicht leer. Es hat den definierten Zustand NULL was nicht mit "" zu vergleichen ist.
SQL-Code:
SELECT * FROM tabelle WEHRE name IS NULL
ist etwas anderes als:
SQL-Code:
SELECT * FROM tabelle WHERE name = ''

Jelly 15. Sep 2005 08:19

Re: Probleme mit DBGrid aktualisierung..
 
Wenn wir schon beim Thema NULL sind, hier auch noch ein Pfeffkörnchen von mir. Wenn du die Abfrage:
SQL-Code:
select sum(Zahlen) from Tabelle
an den Server schickst, und deine Tabelle etwa so aussieht:
Code:
4
2
3
NULL
5
so liefert dir die Query nicht etwa 14, wie vielleicht erwartet, sondern NULL... Tja, auch ein SQL Server kann keine Äpfel und Birnen addieren.

Wenn man also riskiert, NULL Werte in eine SUM Funktion zu benutzen, muss man normalerweise diesen Sachverhalt berücksichtigen. Bei einigen Servern kann mann global einstellen, wie sich SUM in dem Fall verhalten soll, oder man muss sein SQL Befehl etwas anpassen. Etwa so:
SQL-Code:
select Zahlen from Tabelle where not(Zahlen is null)

SKolberg 15. Sep 2005 08:31

Re: Probleme mit DBGrid aktualisierung..
 
Mal eine OT Frage:
Wie kann ich alle Felder im SQL die NULL sind löschen/ mit NA ersetzen??

Zitat:

DELETE FROM munitionsdatenblatt WHERE NSN IS Null
löscht den kompletten Datensatz...

Zitat:

UPDATE munitionsdatenblatt SET NSN=NSN WHERE NSN IS NULL
Error in SQL Syntax

Die erklärung im SQL Handbuch verstehe ich anscheinend nicht richtig..


Mfg, Steve

Jelly 15. Sep 2005 08:37

Re: Probleme mit DBGrid aktualisierung..
 
Von welchem Datentyp ist denn die Spalte NSN... Wenns ein String ist, musst du in deiner Updateformulierung natürlich auch
... set NSN='NSN' ...
Aber was soll das bringen.
Vom Datenbankdesign her sollte man sich vorher überlegen, ob man NULL Werte zulassen will, oder nicht. Dann taucht so ein Problem im Nachhinein gar nicht auf.

SKolberg 15. Sep 2005 08:47

Re: Probleme mit DBGrid aktualisierung..
 
Ich habe zwar schon "etwas" mit Datenbanken gemacht, allerdings jetzt zum erstenmal richtig. Wusste halt nicht das solche Probleme auftauchen.. Habe zuerst komplett alles in Access gehabt, dann Access und SQL genutzt ( noch keine NULL probleme) und jetzt programmiere ich den Frontend in Delphi um vom Access wegzukommen. Ich bin zwar was Hardware und Software problembehebung angeht sehr versiert allerdings nicht im Umgang mit Datenbanken und Programmieren. Aber man lern ja nie aus oder?


Mfg, Steve

Jasocul 15. Sep 2005 08:52

Re: Probleme mit DBGrid aktualisierung..
 
Beim Datenbankdesign kann man dann noch Default-Werte für die betroffenen Felder oder Trigger definieren.
Das sollte dann mal nach gearbeitet werden. Zum jetzigen Zeitpunkt musst du natürlich erstmal sinnvolles eintragen.

Habe gerade gesehen, dass du noch was geschrieben hast.
Ist es eine Web-Anwendung? mySQL ist für mich nicht die ideale Datenbank. Es gibt auch andere kostenlose DBs, die mehr können.

marabu 15. Sep 2005 08:53

Re: Probleme mit DBGrid aktualisierung..
 
Hi Steve,

das hier sollte bei einem (VAR)CHAR Feld funktionieren:

SQL-Code:
UPDATE munitionsdatenblatt SET NSN = 'n/a' WHERE NSN IS NULL
Du solltest dann aber besser ein DEFAULT constraint für solche Spalten definieren.

marabu

SKolberg 15. Sep 2005 08:58

Re: Probleme mit DBGrid aktualisierung..
 
Die Default Werte habe ich gerade geändert, trifft aber nicht auf die bereits vorhandenen daten zu. Muss dann mal die komplette DB überarbeiten.

@Jasocul
Im moment nutzen wir die DB nur im Netzwerk, aber ich denke schon as die Zeit kommen wird wo es nötig ist über VPN/I-Net drauf zuzugreifen. Was für DB's könntest du mir empfehlen?


Mfg, Steve

Jasocul 15. Sep 2005 09:01

Re: Probleme mit DBGrid aktualisierung..
 
In der Firma arbeite ich mit Oracle. Privat benutze ich Firebird. Die kommt von der Funktionalität schon ziemlich nahe an Oracle ran. FB hat zudem den Vorteil, dass sie netzwerkfähig ist, aber auch als Embedded-Version funktioniert.

SKolberg 15. Sep 2005 09:13

Re: Probleme mit DBGrid aktualisierung..
 
War gerade mal bei Oracle und wollte mal die Standard Edition runterladen um mir die mal anzugucken, das Ding ist ja 624 MB gross. Für ISDN ist mir das zu viel. Kann man eine CD von denen bekommen?

Mfg, Steve

Jasocul 15. Sep 2005 09:40

Re: Probleme mit DBGrid aktualisierung..
 
Schick denen doch mal eine Mail. Aber ich denke schon, dass die das machen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:01 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