AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Probleme mit .edit und .post auf eine mySQL Tabelle

Probleme mit .edit und .post auf eine mySQL Tabelle

Ein Thema von mapolat · begonnen am 1. Mär 2005 · letzter Beitrag vom 2. Mär 2005
Antwort Antwort
mapolat

Registriert seit: 1. Mär 2005
Ort: Wuppertal
4 Beiträge
 
#1

Probleme mit .edit und .post auf eine mySQL Tabelle

  Alt 1. Mär 2005, 09:20
Datenbank: mySQL • Version: 4.1.08 • Zugriff über: ZEOS 6.5.1 oder ADO
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;
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Probleme mit .edit und .post auf eine mySQL Tabelle

  Alt 1. Mär 2005, 10:02
Hai mapolat,

ersteinmal : "Herzlich Willkommen in der Delphi-PRAXIS".

Hast Du auch daran gedacht .ReadOnly := False bei deiner TZTable zu setzen?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
mapolat

Registriert seit: 1. Mär 2005
Ort: Wuppertal
4 Beiträge
 
#3

Re: Probleme mit .edit und .post auf eine mySQL Tabelle

  Alt 1. Mär 2005, 11:29
Hi Sharky

Herzlichsten Dank für die Begrüßung und für den raschen TIP.

Zitat:
"Hast Du auch daran gedacht .ReadOnly := False bei deiner TZTable zu setzen? "
Ja alle 3 Tabellen sind ReadOnly := FALSE; Ausserdem würde sonst die 1 Wertzuweisung nicht fehlerfrei laufen können, oder?

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?
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#4

Re: Probleme mit .edit und .post auf eine mySQL Tabelle

  Alt 1. Mär 2005, 11:41
hallo ,

versuche es mal so:
Delphi-Quellcode:

with Tabelle_2 do
begin
   if state <> dsEdit then
   edit;
      FieldByName('Detailsumme1').AsVariant := Summe1;
      FieldByName('Detailsumme2').AsVariant := Summe2;
      FieldByName('Detailsumme3').AsVariant := Summe3;
   post;
end;
oder die hardcore variante
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;
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
mapolat

Registriert seit: 1. Mär 2005
Ort: Wuppertal
4 Beiträge
 
#5

Re: Probleme mit .edit und .post auf eine mySQL Tabelle

  Alt 1. Mär 2005, 13:08
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:
  • Tabelle_1
    REC_NR primärindex, autoinkrement, integer;
    NAME varchar(50)

    Tabelle_2
    REC_NR primärindex, autoinkrement, integer;
    TABELLE_1_REC_NR integer;
    SUMME_1 decimal
    SUMME_2 decimal
    SUMME_3 decimal

    Tabelle_3
    REC_NR primärindex, autoinkrement, integer;
    TABELLE_2_REC_NR integer;
    ZAHL_1 decimal
    ZAHL_2 decimal
    ZAHL_3 decimal
Dann hier die Tabellen-Eigenschaften:

Delphi-Quellcode:
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
Einziger Index ist jeweils REC_NR und wird beim TabellenVerknüpfung (Master.Eigenschaft) benutzt aber sonst im Programm nicht verwendet.
  Mit Zitat antworten Zitat
mapolat

Registriert seit: 1. Mär 2005
Ort: Wuppertal
4 Beiträge
 
#6

Re: Probleme mit .edit und .post auf eine mySQL Tabelle

  Alt 2. Mär 2005, 08:21
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 ????
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Probleme mit .edit und .post auf eine mySQL Tabelle

  Alt 2. Mär 2005, 08:46
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.007 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

Re: Probleme mit .edit und .post auf eine mySQL Tabelle

  Alt 2. Mär 2005, 09:24
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...
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:30 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