![]() |
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 |
Re: Probleme mit DBGrid aktualisierung..
Hast Du RequestLive auf True stehen?
|
Re: Probleme mit DBGrid aktualisierung..
Ja..
Cached Updates := False Mfg, Steve Die Änderungen zeigt er an aber nur halt nicht die neu eingetragenen.. |
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:
ausgefüllt haben, ist ein Feld leer zeigt er den Datensatz erst garnicht an...
ParamByName('MAT').AsString := '%';
ParamByName('Artikel').AsString := '%'; ParamByName('Modell').AsString := '%'; ParamByName('Verwendung').AsString := '%'; Mfg, Steve |
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 |
Re: Probleme mit DBGrid aktualisierung..
Zitat:
|
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 |
Re: Probleme mit DBGrid aktualisierung..
Zitat:
Zitat:
|
Re: Probleme mit DBGrid aktualisierung..
Du sollst nicht das % weglassen, sondern den ganzen Teilausdruck wenn er nicht bestückt wird. Schau mal:
Delphi-Quellcode:
marabu
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; |
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.
|
Re: Probleme mit DBGrid aktualisierung..
Danke @ALL
werde es heute Abend mal mit beiden Varianten ausprobieren. Gerade keine Zeit... Mfg, Steve |
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 |
Re: Probleme mit DBGrid aktualisierung..
Zitat:
SQL-Code:
ist etwas anderes als:
SELECT * FROM tabelle WEHRE name IS NULL
SQL-Code:
SELECT * FROM tabelle WHERE name = ''
|
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:
an den Server schickst, und deine Tabelle etwa so aussieht:
select sum(Zahlen) from Tabelle
Code:
so liefert dir die Query nicht etwa 14, wie vielleicht erwartet, sondern NULL... Tja, auch ein SQL Server kann keine Äpfel und Birnen addieren.
4
2 3 NULL 5 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)
|
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:
Zitat:
Die erklärung im SQL Handbuch verstehe ich anscheinend nicht richtig.. Mfg, Steve |
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. |
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 |
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. |
Re: Probleme mit DBGrid aktualisierung..
Hi Steve,
das hier sollte bei einem (VAR)CHAR Feld funktionieren:
SQL-Code:
Du solltest dann aber besser ein DEFAULT constraint für solche Spalten definieren.
UPDATE munitionsdatenblatt SET NSN = 'n/a' WHERE NSN IS NULL
marabu |
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 |
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.
|
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 |
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 19:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz