AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Datenmenge weder im Editier noch im Einfügemodus

Datenmenge weder im Editier noch im Einfügemodus

Ein Thema von hirsch · begonnen am 10. Apr 2014 · letzter Beitrag vom 10. Apr 2014
Antwort Antwort
Seite 1 von 2  1 2   
hirsch

Registriert seit: 29. Jan 2008
Ort: Tuttlingen
88 Beiträge
 
Delphi 2007 Professional
 
#1

Datenmenge weder im Editier noch im Einfügemodus

  Alt 10. Apr 2014, 11:59
Datenbank: Interbase • Version: 2 • Zugriff über: dbExpress
Sorry Soll heißen: Interbase Ver. 6.0


Nachdem ich nun mehrere Tage mit dem Fehler zugebracht habe und eigentlich alles gelesen und ausprobiert habe, komme ich nicht weiter.
Ich hoffe dass mir jemand weiterhelfen kann.

Delphi-Quellcode:
       sql:='Select * from Teil2710 where ART_SCHN = '''+EDSch.text+''';';
       With DataModule1.CDSArtikel do begin
         if DataModule1.SQLDSArtikel.Active=True then DataModule1.SQLDSArtikel.Active:=False;
         if Active=True then Active:=False;
         DataModule1.SQLDSArtikel.commandText:=sql;
         DataModule1.SQLDSArtikel.Active:=True;
         Active:=True;
         DataModule1.SQLDSArtikel.refresh;
         refresh;
         if recordcount=1 then begin
           FieldByName('ART_GR').asstring:=Art_grp; //<<hier kommt der beschriebene Fehler
           FieldByName('ART_NR').asstring:=Art_Num;
           if State<>dsEdit then
             Edit;
           FieldByName('Bemerkung').asstring:=Bem;
           FieldByName('ART_GR').asstring:=Art_Grp;
           FieldByName('ART_NR').asstring:=Art_Num;
           Post;
           ApplyUpdates(-1);
         end else
           Showmessage('Die Bemerkung konnte nicht eingetragen werden');

         active:=False;
         DataModule1.SQLDSArtikel.Active:=False;
         Art_Grp:='';
         Art_Num:='';
         edSch.Text:='';
         b_merker:=False;
Weiß jemand Rat?
Wolfgang Hirsch

Geändert von hirsch (10. Apr 2014 um 12:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Datenmenge weder im Editier noch im Einfügemodus

  Alt 10. Apr 2014, 12:20
Tja, du solltest das Edit 2 Zeilen hoch schieben...

Frank
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Datenmenge weder im Editier noch im Einfügemodus

  Alt 10. Apr 2014, 12:21
Delphi-Quellcode:
            FieldByName('ART_GR').asstring:=Art_grp; //<<hier kommt der beschriebene Fehler
            FieldByName('ART_NR').asstring:=Art_Num;
            if State<>dsEdit then
              Edit; // << weil du hier erst in den Editiermodus umschaltest
            FieldByName('Bemerkung').asstring:=Bem;
            FieldByName('ART_GR').asstring:=Art_Grp;
            FieldByName('ART_NR').asstring:=Art_Num;
            Post;
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.536 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Datenmenge weder im Editier noch im Einfügemodus

  Alt 10. Apr 2014, 12:21
Du versuchst zuerst, 2 Felder zu ändern, bevor Du in den Editiermodus wechselst?

[edit] Im Übrigen ist der Code ziemlich unübersichtlich, das with trägt dazu nicht unerheblich bei. Und zu Vergleichen mit true/false sollten sich reichlich Threads finden lassen, in denen erklärt wird, wieso man das nicht machen sollte. [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hirsch

Registriert seit: 29. Jan 2008
Ort: Tuttlingen
88 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Datenmenge weder im Editier noch im Einfügemodus

  Alt 10. Apr 2014, 12:32
Oh mann,
das ist ein klarer Fehler, aber so ist das wenn man auf seinen eigenen Wald schaut, sieht man nichts.
Der Code sieht jetzt so aus
Delphi-Quellcode:
sql:='Select * from Teil2710 where ART_SCHN = '''+EDSch.text+''';';
       With DataModule1.CDSArtikel do begin
         if DataModule1.SQLDSArtikel.Active=True then DataModule1.SQLDSArtikel.Active:=False;
         if Active=True then Active:=False;
         DataModule1.SQLDSArtikel.commandText:=sql;
         DataModule1.SQLDSArtikel.Active:=True;
         Active:=True;
         DataModule1.SQLDSArtikel.refresh;
         refresh;
         if recordcount=1 then begin
           Art_grp:=FieldByName('ART_GR').asstring;
           Art_Num:=FieldByName('ART_NR').asstring;
          if State<>dsEdit then
             Edit;
           FieldByName('Bemerkung').asstring:=Bem;
           FieldByName('ART_GR').asstring:=Art_Grp;
           FieldByName('ART_NR').asstring:=Art_Num;
           Post;
           ApplyUpdates(-1);//<<hier kommt jetzt ein anderer Fehler, Table unknown
         end else
           Showmessage('Die Bemerkung konnte nicht eingetragen werden');

         active:=False;
         DataModule1.SQLDSArtikel.Active:=False;
         Art_Grp:='';
         Art_Num:='';
         edSch.Text:='';
         b_merker:=False;
       end;
Was meint er mit Table unknown? Natürlich kennt er die tabelle, mit der arbeite ich weiter oben ja ständig.
Wolfgang Hirsch
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Datenmenge weder im Editier noch im Einfügemodus

  Alt 10. Apr 2014, 12:46
In deinem Beispiel musst du das SQL nicht jedesmal ändern, sondern kannst mit Parametern arbeiten.
Das schützt auch vor SQL-Injection:
Delphi-Quellcode:
  DataModule1.SQLDSArtikel.CommandText := 'Select * from Teil2710 where ART_SCHN = :ART_SCHN;';

  DataModule1.SQLDSArtikel.ParamByName('ART_SCHN').AsString := EDSch.text;
Scheinbar gibt es zwei Komponenten:
SQLDSArtikel
CDSArtikel
Von welcher Klasse sind diese und wie sind sie miteinander verknüpft?
Welche Einstellungen sind gesetzt?
  Mit Zitat antworten Zitat
hirsch

Registriert seit: 29. Jan 2008
Ort: Tuttlingen
88 Beiträge
 
Delphi 2007 Professional
 
#7

AW: Datenmenge weder im Editier noch im Einfügemodus

  Alt 10. Apr 2014, 12:52
Erstmal danke, Blup

SQLDSArtikel ist ein TSQLDataset
CDSArtikel ist ein TClientDataSet

CDSArtikel ist mit deinem TDatasetProvider mit Namen DSPArtikel verbunden. Dieser ist dann mit dem SQLDSArtikel verbunden, und dieser mit der TSQLConnection der an der Datenbank hängt.

DB -> SQL -> DP ->CDS

Welche Einstellungen möchtest Du gerne wissen?

Der Code ist nun hoffentlich übersichtlicher, mit ohne dem With...
Delphi-Quellcode:
     if b_merker=True then begin
       sql:='Select * from Teil2710 where ART_SCHN = '''+EDSch.text+''';';
       if Datamodul.DataModule1.SQLDSArtikel.Active=True then Datamodul.DataModule1.SQLDSArtikel.Active:=False;
       if Datamodul.DataModule1.CDSArtikel.Active=True then Datamodul.DataModule1.CDSArtikel.Active:=False;
       Datamodul.DataModule1.SQLDSArtikel.commandText:=sql;
       Datamodul.DataModule1.SQLDSArtikel.Active:=True;
       Datamodul.DataModule1.CDSArtikel.Active:=True;
       Datamodul.DataModule1.SQLDSArtikel.refresh;
       Datamodul.DataModule1.CDSArtikel.refresh;
       if Datamodul.DataModule1.CDSArtikel.recordcount=1 then begin
         Art_grp:=Datamodul.DataModule1.CDSArtikel.FieldByName('ART_GR').asstring;
         Art_Num:=Datamodul.DataModule1.CDSArtikel.FieldByName('ART_NR').asstring;
         if Datamodul.DataModule1.CDSArtikel.State<>dsEdit then
           Datamodul.DataModule1.CDSArtikel.Edit;
         Datamodul.DataModule1.CDSArtikel.FieldByName('Bemerkung').asstring:=Bem;
         Datamodul.DataModule1.CDSArtikel.FieldByName('ART_GR').asstring:=Art_Grp;
         Datamodul.DataModule1.CDSArtikel.FieldByName('ART_NR').asstring:=Art_Num;
         Datamodul.DataModule1.CDSArtikel.Post;

         Datamodul.DataModule1.CDSArtikel.ApplyUpdates(-1);//<<Table unknown
       end else
         Showmessage('Die Bemerkung konnte nicht eingetragen werden');
         Datamodul.DataModule1.CDSArtikel.active:=False;
         Datamodul.DataModule1.SQLDSArtikel.Active:=False;
         Art_Grp:='';
         Art_Num:='';
         edSch.Text:='';
         b_merker:=False;

     end;
Wolfgang Hirsch

Geändert von hirsch (10. Apr 2014 um 13:07 Uhr)
  Mit Zitat antworten Zitat
hirsch

Registriert seit: 29. Jan 2008
Ort: Tuttlingen
88 Beiträge
 
Delphi 2007 Professional
 
#8

AW: Datenmenge weder im Editier noch im Einfügemodus

  Alt 10. Apr 2014, 13:18
Ok, ich habs....

Ich wusste nicht, das Interbase Groß.- und Kleinschreibung beachtet.....


Vielen Dank an Alle, die versuchten mir zu helfen...
Wolfgang Hirsch
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#9

AW: Datenmenge weder im Editier noch im Einfügemodus

  Alt 10. Apr 2014, 14:22
Mir ist an deinem Code aufgefallen, daß du zuerst die beiden Felder ART_NR und ART_GR ausliest, um im Editmodus genau diese beiden Werte wieder in genau diese Felder reinzuschreiben. Das ergibt irgendwie keinen Sinn: Wenn du diese beiden Werte nicht ändern möchtest, mußt du diese beiden Felder auch nicht anfassen.

Delphi-Quellcode:
         // Art_grp:=Datamodul.DataModule1.CDSArtikel.FieldByName('ART_GR').asstring;
         // Art_Num:=Datamodul.DataModule1.CDSArtikel.FieldByName('ART_NR').asstring;
         if Datamodul.DataModule1.CDSArtikel.State<>dsEdit then
           Datamodul.DataModule1.CDSArtikel.Edit;
         Datamodul.DataModule1.CDSArtikel.FieldByName('Bemerkung').asstring:=Bem;
         // Datamodul.DataModule1.CDSArtikel.FieldByName('ART_GR').asstring:=Art_Grp;
         // Datamodul.DataModule1.CDSArtikel.FieldByName('ART_NR').asstring:=Art_Num;
         Datamodul.DataModule1.CDSArtikel.Post;
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Datenmenge weder im Editier noch im Einfügemodus

  Alt 10. Apr 2014, 15:22
Du kannst die Zeilen mit
Delphi-Quellcode:
if SomeDataset.Active {= True} then
  SomeDataset.Active := False;
einfach ersetzen durch
Delphi-Quellcode:
// Dataset soll geschlossen sein
SomeDataset.Active := False;
Ist die Datenmenge geöffnet, dann wird die geschlossen, ansonsten bleibt die geschlossen.
Dein Code bläht das nur um eine zusätzliche und unnötige Abfrage auf.

In deinem Code ist auch die Abfrage auf den State unnötig, denn kurz vorher öffnest du die Datenmenge und dann ist die gesichert niemals im dsEdit State.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

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 19:33 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