AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ominöse "not in edit mode"-meldung
Thema durchsuchen
Ansicht
Themen-Optionen

ominöse "not in edit mode"-meldung

Ein Thema von sancho1980 · begonnen am 23. Feb 2006 · letzter Beitrag vom 25. Feb 2006
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#1

ominöse "not in edit mode"-meldung

  Alt 23. Feb 2006, 23:14
Datenbank: interbase 6.5 • Zugriff über: ibx, ibexpert
Hi,
bin hier grad am Verzweifeln.
Ich will Daten von einer Datenbank in eine andere konvertieren (ich weiß, das hatten wir schonmal; musste aber meine Datenbankstruktur nochmal ändern).
Ich hab echt schon alles mögliche ausprobiert, zuerst mit TIBTable-Komponenten, dann dacht ich mir, weil ich beim letzten Mal, als es noch funktioniert hatte, TIBDataSets verwendet hatte, versuch ich das nochmal, aber nein.
Mit diesem Code-Snippet versuche ich was in meine Datenbank einzufügen:

Delphi-Quellcode:
function THauptFormular.ConvertAUT: Boolean;
var
  successful: Boolean;
begin
  successful := false;
  Try
    DatenModul.Table_AUT.Active := true;
    DatenModul.Table_AUT.First();
    while not DatenModul.Table_AUT.Eof do
      begin
        DatenModul.IBDataSet_AUT.Open();
        DatenModul.IBDataSet_AUT.Insert();
        DatenModul.IBDataSet_AUTAUT.AsString := DatenModul.Table_AUTAUT.AsString; //hier kommt die Meldung der Error "not in edit mode"
        DatenModul.IBDataSet_AUTVF.AsString := DatenModul.Table_AUTVF.AsString;
        DatenModul.IBDataSet_AUTFUNKTION.AsString := DatenModul.Table_AUTFUNKTION.AsString;
        DatenModul.IBDataSet_AUTFIRMA1.AsString := DatenModul.Table_AUTFIRMA1.AsString;
        DatenModul.IBDataSet_AUTFIRMA2.AsString := DatenModul.Table_AUTFIRMA2.AsString;
        DatenModul.IBDataSet_AUTSTRASSE.AsString := DatenModul.Table_AUTSTRASSE.AsString;
        DatenModul.IBDataSet_AUTPLZ.AsString := DatenModul.Table_AUTPLZ.AsString;
        DatenModul.IBDataSet_AUTORT.AsString := DatenModul.Table_AUTORT.AsString;
        DatenModul.IBDataSet_AUTLAND.AsString := DatenModul.Table_AUTLAND.AsString;
        DatenModul.IBDataSet_AUTTEL.AsString := DatenModul.Table_AUTTEL.AsString;
        DatenModul.IBDataSet_AUTTELPRIV.AsString := DatenModul.Table_AUTTELPRIV.AsString;
        DatenModul.IBDataSet_AUTFAX.AsString := DatenModul.Table_AUTFAX.AsString;
        DatenModul.IBDataSet_AUTANM.AsString := DatenModul.Table_AUTANM.AsString;
        DatenModul.IBDataSet_AUTDATUM.AsDateTime := DatenModul.Table_AUTDATUM.AsDateTime;
        DatenModul.IBDataSet_AUTTYP.AsString := DatenModul.Table_AUTTYP.AsString;
        DatenModul.IBDataSet_AUT.Post();
        DatenModul.IBDataSet_AUT.Next();
        DatenModul.IBDataSet_AUT.Close();
      end;
    successful := true;
  Except
    on E : Exception do
      ShowMessage(E.ClassName+'-Fehler aufgetreten in ConvertAUT mit Nachricht: '+E.Message);
  end;
  if successful then
    ConvertAUT := true
  else
    ConvertAUT := false;
  DatenModul.Table_AUT.Close();
  DatenModul.IBDataSet_AUT.Close();
end;
Ich habe echt schon alles ausprobiert. Auch ein einfügen von DatenModul.IBDataSet_AUT.Edit() bringt nichts. Ich raff's nicht. Ihr vielleicht?

Danke,
Martin


Die Definition meiner Dataset-Komponente ist folgende:

Code:
object IBDataSet_AUT: TIBDataSet
    Database = IBDatabase1
    Transaction = IBTransaction
    BeforeInsert = IBDataSet_AUTBeforeInsert
    DeleteSQL.Strings = (
      'delete from AUT'
      'where'
      ' ID = :OLD_ID')
    InsertSQL.Strings = (
      'insert into AUT'

        ' (ID, AUT, VF, FUNKTION, FIRMA1, FIRMA2, STRASSE, PLZ, ORT, LAN' +
        'D, TEL, '
      '  TELPRIV, FAX, ANM, DATUM, TYP)'
      'values'

        ' (:ID, :AUT, :VF, :FUNKTION, :FIRMA1, :FIRMA2, :STRASSE, :PLZ, ' +
        ':ORT, :LAND, '
      '  :TEL, :TELPRIV, :FAX, :ANM, :DATUM, :TYP)')
    RefreshSQL.Strings = (
      'Select '
      ' ID,'
      ' AUT,'
      ' VF,'
      ' FUNKTION,'
      ' FIRMA1,'
      ' FIRMA2,'
      ' STRASSE,'
      ' PLZ,'
      ' ORT,'
      ' LAND,'
      ' TEL,'
      ' TELPRIV,'
      ' FAX,'
      ' ANM,'
      ' DATUM,'
      ' TYP'
      'from AUT '
      'where'
      ' ID = :ID')
    SelectSQL.Strings = (
      'select * from AUT')
    ModifySQL.Strings = (
      'update AUT'
      'set'
      ' ID = :ID,'
      ' AUT = :AUT,'
      ' VF = :VF,'
      ' FUNKTION = :FUNKTION,'
      ' FIRMA1 = :FIRMA1,'
      ' FIRMA2 = :FIRMA2,'
      ' STRASSE = :STRASSE,'
      ' PLZ = :PLZ,'
      ' ORT = :ORT,'
      ' LAND = :LAND,'
      ' TEL = :TEL,'
      ' TELPRIV = :TELPRIV,'
      ' FAX = :FAX,'
      ' ANM = :ANM,'
      ' DATUM = :DATUM,'
      ' TYP = :TYP'
      'where'
      ' ID = :OLD_ID')
    Left = 312
    Top = 448
    object IBDataSet_AUTID: TIntegerField
      FieldName = 'ID'
      Origin = '"AUT"."ID"'
      ProviderFlags = [pfInUpdate, pfInWhere, pfInKey]
      Required = True
    end
    object IBDataSet_AUTAUT: TIBStringField
      FieldName = 'AUT'
      Origin = '"AUT"."AUT"'
      FixedChar = True
      Size = 30
    end
    object IBDataSet_AUTVF: TIBStringField
      FieldName = 'VF'
      Origin = '"AUT"."VF"'
      FixedChar = True
      Size = 150
    end
    object IBDataSet_AUTFUNKTION: TIBStringField
      FieldName = 'FUNKTION'
      Origin = '"AUT"."FUNKTION"'
      FixedChar = True
      Size = 150
    end
    object IBDataSet_AUTFIRMA1: TIBStringField
      FieldName = 'FIRMA1'
      Origin = '"AUT"."FIRMA1"'
      FixedChar = True
      Size = 150
    end
    object IBDataSet_AUTFIRMA2: TIBStringField
      FieldName = 'FIRMA2'
      Origin = '"AUT"."FIRMA2"'
      FixedChar = True
      Size = 150
    end
    object IBDataSet_AUTSTRASSE: TIBStringField
      FieldName = 'STRASSE'
      Origin = '"AUT"."STRASSE"'
      FixedChar = True
      Size = 120
    end
    object IBDataSet_AUTPLZ: TIBStringField
      FieldName = 'PLZ'
      Origin = '"AUT"."PLZ"'
      FixedChar = True
      Size = 30
    end
    object IBDataSet_AUTORT: TIBStringField
      FieldName = 'ORT'
      Origin = '"AUT"."ORT"'
      FixedChar = True
      Size = 120
    end
    object IBDataSet_AUTLAND: TIBStringField
      FieldName = 'LAND'
      Origin = '"AUT"."LAND"'
      FixedChar = True
      Size = 60
    end
    object IBDataSet_AUTTEL: TIBStringField
      FieldName = 'TEL'
      Origin = '"AUT"."TEL"'
      FixedChar = True
      Size = 60
    end
    object IBDataSet_AUTTELPRIV: TIBStringField
      FieldName = 'TELPRIV'
      Origin = '"AUT"."TELPRIV"'
      FixedChar = True
      Size = 60
    end
    object IBDataSet_AUTFAX: TIBStringField
      FieldName = 'FAX'
      Origin = '"AUT"."FAX"'
      FixedChar = True
      Size = 60
    end
    object IBDataSet_AUTANM: TIBStringField
      FieldName = 'ANM'
      Origin = '"AUT"."ANM"'
      FixedChar = True
      Size = 240
    end
    object IBDataSet_AUTDATUM: TDateField
      FieldName = 'DATUM'
      Origin = '"AUT"."DATUM"'
    end
    object IBDataSet_AUTTYP: TIBStringField
      FieldName = 'TYP'
      Origin = '"AUT"."TYP"'
      FixedChar = True
      Size = 3
    end
  end
[edit=MrSpock]Code Tags gesetzt. Mfg, MrSpock[/edit]
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: ominöse "not in edit mode"-meldung

  Alt 23. Feb 2006, 23:33
Kannst Du das mal so formatieren, dass man es auch lesen kann
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
CG2003

Registriert seit: 8. Nov 2003
Ort: Hamburg
470 Beiträge
 
Delphi 2009 Professional
 
#3

Re: ominöse "not in edit mode"-meldung

  Alt 23. Feb 2006, 23:40
Versuch' es mal so, indem Du in Deiner Function, in der Du konvertierst, das erste "DatenModul.IBDataSet_AUT.Close();" rausnimmst.

So wird doch die Tabelle geschlossen. Da kann nichts mehr eingefüht werden.
Sebastian M.
Viele Grüße aus Hamburg


Meine Website: www.sebastian-mundt.com
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#4

Re: ominöse "not in edit mode"-meldung

  Alt 23. Feb 2006, 23:48
das geht hier leider nicht
aber ich hab mal nen anhang mit allem gemacht
folgendermaßen: das projekt heißt cats2cats
im alten datenbankformat gibt es separate aut-, lit-, deskr- und wörterbuchdateien
im neuen soll das alles in einer einzigen datenbank gespeichert werden
was ich bisher gemacht hab, ist mich mit der aut-datenbank zu befassen, also si umzuwandeln
den rest einfach ignorieren, das läuft noch nicht
aber wie gesagt, schon bei der aut-datei hapert's
bitte mal nachschauen!
grüße von le (leipzig) nach lu (luxemburg) hehe
martin
Angehängte Dateien
Dateityp: rar cats2cats_120.rar (431,7 KB, 11x aufgerufen)
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#5

Re: ominöse "not in edit mode"-meldung

  Alt 23. Feb 2006, 23:49
aber das wird doch in jedem schleifendurchgang neu geöffnet!
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
Frank Borland

Registriert seit: 12. Feb 2006
Ort: Hamburg
55 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: ominöse "not in edit mode"-meldung

  Alt 24. Feb 2006, 08:03
Moin, moin,
3 Fragen beim Lesen:

TDatenModul.IBDataSet_AUTBeforeInsert(DataSet: TDataSet) und TRIGGER AUT_BI0

warum benutzt Du nicht das übergebene Dataset, wie ist der Status von IBDataSet_AUT beim Verlassen der Funktion und warum das Alles wenn es TRIGGER AUT_BI0 gibt?


Delphi-Quellcode:
DatenModul.IBDataSet_AUT.Insert();
DatenModul.IBDataSet_AUTAUT.AsString := DatenModul.Table_AUTAUT.AsString; //hier kommt die Meldung der Error "not in edit mode"
Ich würde mal schrittweise zwischen den Befehlen DatenModul.IBDataSet_AUTAUT und DatenModul.IBDataSet_AUT auf active überwachen


Gruß


Malte
  Mit Zitat antworten Zitat
Benutzerbild von Der Jan
Der Jan

Registriert seit: 22. Dez 2005
289 Beiträge
 
Delphi XE7 Ultimate
 
#7

Re: ominöse "not in edit mode"-meldung

  Alt 24. Feb 2006, 08:37
Juhu, endlich formatierter Code

Allso: Erstmal würde ich das "DatenModul.IBDataSet_AUT.Open();" und "DatenModul.IBDataSet_AUT.Close();" aus der schleife rausnehmen. Geht schneller
Ist aber nicht das Problem...
Zitat:
DatenModul.IBDataSet_AUT.Next();
Was soll das bringen? Du fügst doch in das DataSet ein. Bei "Insert" (Ich würde Append nehmen, aber egal) wird der Cursor automatisch gesetzt...
Ich denke, es sollte sein:
DatenModul.Table_AUT.Next(); Ich weiß jetzt nicht aus dem Kopf, ob IBX da einen unterschied macht, aber IMHO sollte das Dataset im Insert-Mode sein.

Dann könntest du noch probieren, nicht über Felder (Tstringfield etc.) zu gehen, sondern direkt
DatenModul.IBDataSet_AUT.FieldValues['wasweissich'] := ...
Gruß, Jan
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#8

Re: ominöse "not in edit mode"-meldung

  Alt 24. Feb 2006, 11:35
Zitat von Frank Borland:
und warum das Alles wenn es TRIGGER AUT_BI0 gibt?
Genau damit hatte ich schon immer 'n Problem. Eigentlich sollte der Trigger das alleine machen, aber wenn ich versuche, einen Datensatz einzufügen, ohne ID zu belegen, bekomm ich eine Fehlermeldung, von wegen, ID ist nicht belegt...
Wollt ich sowieso schon immer mal wissen was ich da falsch mache...

Zitat von Frank Borland:
Ich würde mal schrittweise zwischen den Befehlen DatenModul.IBDataSet_AUTAUT und DatenModul.IBDataSet_AUT auf active überwachen
Das hab ich wirklich gestern den ganzen Tag lang gemacht! Deswegen bin ich ja so verzweifelt...

Zitat von Der Jan:
Ich denke, es sollte sein:
Zitat von Delphi-Quellcode::
DatenModul.Table_AUT.Next();
Stimmt. Für 'ne Sekunde dacht ich daran lag's..Aber die besch... Meldung kommt trotzdem noch!

Zitat von Der Jan:
Juhu, endlich formatierter Code
Na wenn dann richtig
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
Frank Borland

Registriert seit: 12. Feb 2006
Ort: Hamburg
55 Beiträge
 
Delphi 2006 Enterprise
 
#9

Re: ominöse "not in edit mode"-meldung

  Alt 24. Feb 2006, 12:29
Zitat von sancho1980:
Zitat von Frank Borland:
und warum das Alles wenn es TRIGGER AUT_BI0 gibt?
Genau damit hatte ich schon immer 'n Problem. Eigentlich sollte der Trigger das alleine machen, aber wenn ich versuche, einen Datensatz einzufügen, ohne ID zu belegen, bekomm ich eine Fehlermeldung, von wegen, ID ist nicht belegt...
Wollt ich sowieso schon immer mal wissen was ich da falsch mache...
Der Trigger kommt schon alleine klar. Da das Feld not null definiert ist musst Du einen Wert mitgeben. Hier bietet sich bei integer- Feldern (z.B.) -1 an, da kann jeder beim 1. Versuch sehen, ob der Generator anspringt.
Andererseits könntest Du im Trigger darauf reagieren, woher die Daten kommen, z.B.IF (OLD.ID=-1) THEN... Gruß


Malte
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10

Re: ominöse "not in edit mode"-meldung

  Alt 24. Feb 2006, 13:03
Bei nicht definierter ID soll er aber besser DEFAULT verwenden ! Ist also kein ID-Wert definiert, dann gilt der default Wert. Allerdings, was soll das überhaupt, eine ID zu verwenden, die nicht besetzt wird ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 12:58 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