![]() |
Datenbank: mySQL • Version: 4.1.08 • Zugriff über: ZEOS 6.5.1 oder ADO
Probleme mit .edit und .post auf eine mySQL Tabelle
Habe Probleme mit TTabel.Post. Beim ausführen des "Post" Befehls auf eine mySQL Tabelle (mit und ohne ZEOS 6.5.1 Komponente) wird die Felhlermeldung : "Tabelle weder im Einfüge- noch Editier- Modus!". Komme einfach nicht mehr weiter und brauche dringend Hilfe. (evtl krz. Beschreibung welche Befehle man zum editieren auf jeden Fall benutzen müsste (.edit, .commit, .update, .updateRecords?????)
Ich habe zwar gefunden wo genau dieses Problem verursacht wird, weiss aber immer noch nicht warum und wie ich es beheben könnte. Das formular hat 3 tabellen die miteinander in der Tabellen-Eigenschaften über Master-Detail verknüpft sind. Tabelle1 ist Master Tabelle vom Tabelle2. Tabelle3 ist wiederum die Detail-Tabelle vom Tabelle2. Nun zum besseren Fehlerbeschreibung : Tabelle1, Tabelle2, Tabelle3 sind alle active, also Status = Open. Wird es im Tabelle 3 eine Änderung vorgenommen so wird im "After.Post" eigenschaft diese änderung an Tabelle2 übergeben wo dann der Fahler passiert.
Delphi-Quellcode:
procedure TFrm_01.BTN_1Click(Sender: TObject);
begin Tabelle_3.Edit; Tabelle_3.FieldByName('Zahl_1').Value := 3; Tabelle_3.FieldByName('Zahl_2').Value := 5; Tabelle_3.FieldByName('Zahl_3').Value := 11; if MessageBox(0, 'Möchten Sie die Änderungen wirklich übernehmen?', 'WARNUNG', MB_YESNO) = IDYES then Tabelle_3.Post else Tabelle_3.Cancel; end; procedure TFrm_01.Tabelle_3AfterPost(DataSet: TDataSet); var Summe_1, Summe_2, Summe_3 : integer; begin Summe_1 := 0; Summe_2 := 0; Summe_3 := 0; with Tabelle_3 do begin first; while not EOF do begin Summe_1 := Summe_1 + FieldByName('Zahl_1').AsInteger; Summe_2 := Summe_2 + FieldByName('Zahl_2').AsInteger; Summe_3 := Summe_3 + FieldByName('Zahl_3').AsInteger; next; end; end; Tabelle_2.Edit; // Tabelle 2 ist hier in Tabelle_2.State = dsEdit - soweit noch alles OK. Tabelle_2.FieldByName('DetailSumme_1').asVariant := Summe_1; // alles noch im grünen Bereich. 1.Wertzuweisung wird noch übernommen // Hier (nach dem 1. Wertzuweisung) aber passiert der Fehler.. // Hier springt die Tabelle 2 unerwünscht und für mich unerklärlich auf Tabelle_2.State = dsBrowse Tabelle_2.FieldByName('DetailSumme_2').asVariant := Summe_2; Tabelle_2.FieldByName('DetailSumme_3').asVariant := Summe_3; // diese beiden Wertzuweisungen werden nicht mehr übernommen da Tabelle_3 im dsBrowse Status ist. Tabelle_2.Post; // während der post ausführung kommt dann die Fehlermeldung "Tabelle_2 weder in EDIT- noch in INSERT- Modus !" end; |
Re: Probleme mit .edit und .post auf eine mySQL Tabelle
Hai mapolat,
ersteinmal : "Herzlich Willkommen in der Delphi-PRAXIS". Hast Du auch daran gedacht .ReadOnly := False bei deiner TZTable zu setzen? |
Re: Probleme mit .edit und .post auf eine mySQL Tabelle
Hi Sharky
Herzlichsten Dank für die Begrüßung und für den raschen TIP. Zitat:
Aber trotztdem habe ich es vorhin nochmal gecheckt was dies auch bestätigte. Also wird es nicht daran liegen können. vielleicht hast du einen anderen TIP? |
Re: Probleme mit .edit und .post auf eine mySQL Tabelle
hallo ,
versuche es mal so:
Delphi-Quellcode:
oder die hardcore variante :mrgreen: with Tabelle_2 do begin if state <> dsEdit then edit; FieldByName('Detailsumme1').AsVariant := Summe1; FieldByName('Detailsumme2').AsVariant := Summe2; FieldByName('Detailsumme3').AsVariant := Summe3; post; end;
Delphi-Quellcode:
if Table2.State = dsEdit then
begin Table2['Detailsumme1']:= Table3.FieldByName('Summe1').AsVariant; Table2['Detailsumme2']:= Table3.FieldByName('Summe2').AsVariant; Table2['Detailsumme3']:= Table3.FieldByName('Summe3').AsVariant; end; |
Re: Probleme mit .edit und .post auf eine mySQL Tabelle
Hi Kiar,
Dies habe ich auch versucht. Auch bei dem Versuch gab es nach der 1. Wertzuweisung Fehler. Komischerweise wird der 1. Wert angenommen dann springt die TabellenStatus auf dsBrowse. Villeicht ein paar Details mehr : Zunächst hier die mySQLDB Tabellen-Struktur:
Delphi-Quellcode:
Einziger Index ist jeweils REC_NR und wird beim TabellenVerknüpfung (Master.Eigenschaft) benutzt aber sonst im Programm nicht verwendet.
object Tabelle_1: TZTable
Connection = mySQLDB CachedUpdates = False Active = True ReadOnly = False TableName = 'Tabelle_1' ShowRecordTypes = [usUnmodified, usModified, usInserted] UpdateMode = umUpdateChanged WhereMode = wmWhereKeyOnly Options = [doCalcDefaults] Left = 336 Top = 65532 object Tabelle_1REC_NR: TIntegerField FieldName = 'REC_NR' end object Tabelle_1NAME: TStringField DisplayLabel = 'Name' FieldName = 'NAME' Size = 50 end end object Tabelle_2: TZTable Connection = mySQLDB CachedUpdates = False Active = True ReadOnly = False TableName = 'Tabelle_2' ShowRecordTypes = [usUnmodified, usModified, usInserted] MasterFields = 'REC_NR' MasterSource = D_Tabelle_1 IndexFieldNames = 'TABELLE_1_REC_NR' UpdateMode = umUpdateChanged WhereMode = wmWhereKeyOnly Options = [doCalcDefaults] Left = 284 Top = 65532 object Tabelle_2REC_NR: TIntegerField FieldName = 'REC_NR' end object Tabelle_2TABELLE_1_REC_NR: TIntegerField FieldName = 'TABELLE_1_REC_NR' LookupDataSet = Tabelle_1 LookupKeyFields = 'REC_NR' LookupResultField = 'NAME' KeyFields = 'TABELLE_1_REC_NR' end object Tabelle_2SUMME_1: TFloatField DisplayLabel = 'Summe_1' FieldName = 'SUMME_1' DisplayFormat = '#0.00' end object Tabelle_2SUMME_2: TFloatField DisplayLabel = 'Summe_2' FieldName = 'SUMME_2' DisplayFormat = '#0.00' end object Tabelle_2SUMME_3: TFloatField DisplayLabel = 'Summe_3' FieldName = 'SUMME_3' DisplayFormat = '#0.00' end end object Tabelle_3: TZTable Connection = mySQLDB CachedUpdates = False AfterPost = Tabelle_3AfterPost Active = True ReadOnly = False TableName = 'Tabelle_3' ShowRecordTypes = [usUnmodified, usModified, usInserted] MasterFields = 'REC_NR' MasterSource = D_Tabelle_2 IndexFieldNames = 'TABELLE2_REC_NR' UpdateMode = umUpdateChanged WhereMode = wmWhereKeyOnly Options = [doCalcDefaults] Left = 456 Top = 65532 object Tabelle_3ZAHL_1: TFloatField DefaultExpression = '0.00' FieldName = 'ZAHL_1' DisplayFormat = '#0.00' end object Tabelle_3ZAHL_2: TFloatField DefaultExpression = '0.00' FieldName = 'ZAHL_2' DisplayFormat = '#0.00' end object Tabelle_3ZAHL_3: TFloatField DefaultExpression = '0.00' FieldName = 'ZAHL_3' DisplayFormat = '#0.00' end end |
Re: Probleme mit .edit und .post auf eine mySQL Tabelle
Hi,
Jetzt habe ich herraus gefunden was den Fehler verursacht, kenne aber nach wie vor weder den Grund noch eine Lösung. Es liegt also in der Master-Detail Eigenschaft zwische Tabelle_1 und Tabelle_2. Entferne ich diese Eigenschaften (also die Master-Detail verknüpfung aus der TabellenEigenschaften) Dann klappt es mit edit und post auf Tabelle_2. Selstam ist allerdings dass es mit dem Tabelle_2 und Tabelle_3 klappt. Wie schon gesagt ist ja Tabelle_1 Master vom Tabelle_2. Dieser ist wiederum Master von Tabelle_3. Bei bestehenden Master-Detail Eigenschaft kann ich Tabelle_3 und Tabelle_2 in beliebigen kombinationen editieren und posten. Warum, wieso, weshalb ??? was ist die Lösung ???? |
Re: Probleme mit .edit und .post auf eine mySQL Tabelle
Hai mapolat,
eine Lösung für diesen Fall kann ich Dir leider nicht sagen da ich nicht mit TTable arbeite. Ich baue mir meine "Master-Detail" Anzeigen immer mit eigenen Querys auf. Ich finde da ist man wesentlich flexibler damit. |
Re: Probleme mit .edit und .post auf eine mySQL Tabelle
Hallo mapolat,
ich hab jetzt mal deinen Fall nachgebaut und muss feststellen, dass bei mir kein Fehler auftritt. Was für mich allerdings noch unerklärlich ist, und sicherlich eine Fehlerquelle darstellt, ist das Speichern eines Satzes in einer Detail-Tabelle, ohne einen Bezug zu der Master-Tabelle zu haben. Häng doch mal bitte dein Projekt und wenn möglich ein SQL-Script für deine Datenbank an... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:18 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