![]() |
Datenbank: ADS • Version: 8.1 • Zugriff über: kp
Problem mit Datensatz speichern
Hallo,
ich habe ein Problem mit dem Speichern von änderungen in einer Query. Also ich habe eine Query welche normal per SQL Statement gefüllt wird und Später in einem StringGrid ausgegeben wird. Ich benutze ein StringGrid wegen der einfachen durchnummerierung der Datensätze, falls jemand weiß ob man das in einem DBGrid einfach so einstellen kann wäre ich sehr dankbar wenn er mir verraten würde wie das geht, das aber nur so nebenbei. Also sobald dann etwas in dem StringGrid verändert wird sollen die Geänderten Datensätze in eine Tabelle geschrieben werden bzw. die Datensätze in die Tabelle zurückgeschrieben werden aus der ich sie auch per SQL STatement geholt habe. Hier liegt jetzt aber mein Problem, ich bekomme eine Fehlermeldung: "In eine Datenmenge die nur zum lesen geeignet ist kann nicht geschrieben werden" oder sowas in der Art, aber der grobe Inhalt sollte so stimmen. Ich habe gedacht das ich das einfach so machen kann:
Delphi-Quellcode:
Also das ich das gesamte StringGrid wegschreibe nachdem etwas verändert wurde (hier besteht sicherlich noch bearbeitungsbedarf, es sollte aber hauptsache erstmal irgendwas weggeschrieben werden).
for i := 1 to VisiStringGrid1.RowCount do
begin for z := 1 to sl.Count do begin VddQuery3.Edit; VddQuery3.FieldByName(sl[z]).asString := VisiStringGrid1.Cells[i,z]; VddQuery3.Post; end; end; Nur, wie gesagt, klappt das nicht so wirklich. Weiß vielleicht jemand Rat? mfg Alex |
Re: Problem mit Datensatz speichern
Du könntest ein berechnetes Feld verwenden
|
Re: Problem mit Datensatz speichern
um das zu vereinfachen, nimm lieber ein dbgrid
und verbinde es mit dem Dataset. Wenn der Dataset neu eingelesen wird, aktualisiert sich auch dein grid. |
Re: Problem mit Datensatz speichern
Ja das ist mir schon klar @ Privateer3000
Ich hab ja kein Problem damit das sich das Grid nicht aktualisiert, sondern das ich keine Werte in eine .ads Tabelle speichern kann :( Wie geht das mit den Berechneten Feldern und was bringen sie mir für einen Vorteil, hab grad mal etwas nach gestöbert aber wie sollen sie mir bei dem Problem mit dem Wegschreiben der Datensätze in eine .ads Tabelle helfen? mfg Alex |
Re: Problem mit Datensatz speichern
Mit dem berechneten Feld könntest du die Nr realisieren
|
Re: Problem mit Datensatz speichern
Achso :)
Ja, das wär nicht schlecht, werd ich mir mal anschaun wenn ich wirklich auf ein DBGrid umsteigen sollte. Danke. Aber meine Eingangsfrage ist leider noch offen, hoffe auf weitere Hilfe, danke schonmal im vorraus :) mfg Alex |
Re: Problem mit Datensatz speichern
Das Problem mit dem Update erledigt sich beim Einsatz des DBGrids.
|
Re: Problem mit Datensatz speichern
Hmm also erstmal danke für die Antworten, Ich habe es jetzt wieder auf ein DBGrid umgestellt habe aber jetzt wieder das gleiche Problem, "Eine Datenmenge, die nur zum Lesen ist, kann nicht geändert werden." :(
Der Fehler tritt auf sobald ich Werte in das calculated field schreiben will, das mache ich so:
Delphi-Quellcode:
Habe ich vielleicht was vergessen?
for i := 0 to Query.RecordCount - 1 do
begin Query.Edit; Query.FieldByName('DatensatzNr').asInteger := i; end; mfg Alex |
Re: Problem mit Datensatz speichern
Wie sieht die Abfrage aus? was willst du hier editieren?
|
Re: Problem mit Datensatz speichern
Also so setze ich meine Abfrage zusammen:
Delphi-Quellcode:
Mit dem Code in meinem vorherigen Post will ich Felder meines berechneten Feldes füllen, will aber halt nicht wirklich :(
SQL := 'Select packpf.AdrNr, packpf.BelegNr, packpf.Tour, packpf.Liefertermin,';
SQL := SQL + ' pacpos.ID, pacpos.Lagerort, pacpos.Platz, pacpos.Anzahl, pacpos.Istmenge,'; SQL := SQL + ' pacpos.Sollmenge, pacpos.Restmenge, pacpos.Artnr, packpf.Activ, packpf.BelegartID,'; SQL := SQL + ' packpf.Datum, pacpos.belegnr,'; SQL := SQL + ' pacpos.Summeanzahl, pacpos.Reihenfolge, pacpos.Einheit'; SQL := SQL + ' from packpf inner join pacpos on packpf.belegnr = pacpos.belegnr'; DateTime := DateTimeToStr(DateTimeP.DateTime); DTDay := Copy(DateTime, 1, 2); DTMonth := Copy(DateTime, 4, 2); DTYear := Copy(DateTime, 7, 4); DTTIme := '00:00:00.000'; DTGes := DTMonth+ '/' + DTDay + '/' + DTYear + ' ' + DTTime; SQL := SQL + ' WHERE(packpf.Activ = '+QuotedStr('o')+') and (packpf.Tour = '+QuotedStr(ComboBox.Items[ComboBox.ItemIndex])+') and (packpf.Liefertermin = convert('+QuotedStr(DTGes)+', sql_timestamp))'; case RadioGroup.ItemIndex of 0: SQL := SQL + ' Order by packpf.Tour, pacpos.Lagerort, pacpos.Platz, pacpos.artnr '; 1: SQL := SQL + ' Order by packpf.Tour, pacpos.ArtNr'; 2: SQL := SQL + ' Order by packpf.Tour, packpf.AdrNr, pacpos.ArtNr'; end; Query.SQL.Add(SQL); Query.Open; Edit: ReadOnly der Query steht auf False ;) mfg Alex |
Re: Problem mit Datensatz speichern
Hat niemand mehr einen Vorschlag?
mfg Alex |
Re: Problem mit Datensatz speichern
Ich kenn mich mit ADS nicht aus, aber wenn ich mir das SQL Statement so anschauen, hab ich so meine Zweifel, daß diese Quere updateable ist. Schau mal in der ADS Doku nach welche Bedingung eine Query erfüllen muss, dass man sie einfach durch Wertsetzen ändern kann. Ansonsten wird Dir nichts anderes übrig bleiben, als die geänderten Daten per seperater SQL Query zu updaten (Update ... where ...)
Grüße, Ulrich |
Re: Problem mit Datensatz speichern
Danke an alle, ULIK hat mich glaube auf den richtigen Weg gebracht, ich werde mal insert into ausprobieren weil ich immer neue Datensätze brauch :)
Falls es noch weitere Probleme geben sollte melde ich mich. mfg Alex |
Re: Problem mit Datensatz speichern
Zum Ändern ist INSERT aber der falsche Befehl ;)
|
Re: Problem mit Datensatz speichern
Ja, das weiß ich, ich hab ja geschrieben das ich immer neue Datensätze brauche.
Also neue Datensätze zumindest in einer Tabelle, in 3 anderen wird nur jeweils ein Feld gefüllt, dafür benutze ich dann Update ;) |
Re: Problem mit Datensatz speichern
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:15 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 by Thomas Breitkreuz