Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Probleme beim einfügen von neuen Datensätzen (https://www.delphipraxis.net/165061-probleme-beim-einfuegen-von-neuen-datensaetzen.html)

Flash68 13. Dez 2011 12:32

Datenbank: MSSQL • Version: 2008R2 Express • Zugriff über: Delphi/Ado

Probleme beim einfügen von neuen Datensätzen
 
Hallo zusammen,

bei mir funktioniert das einfügen von neuen Datensätzen teilweise nicht mehr. Wenn ich das einfügen vom Navigator benutze dann öffnet sich ein neuer Datensatz, wenn ich den Befehl append benutze tut sich nichts:

Delphi-Quellcode:
procedure TFRM_Main.But_NeuClick(Sender: TObject);
begin
  DM_Rechner.ADS_Rechner.Append;
end;
Kann mir jemand dabei helfen?

Gruß

Flash

DeddyH 13. Dez 2011 12:40

AW: Probleme beim einfügen von neuen Datensätzen
 
Jepp, die Hilfe: http://docwiki.embarcadero.com/VCL/d...DataSet.Append

Zitat:

Bei Datenmengen, die eine Bearbeitung erlauben, können Sie mit Append folgende Aktionen durchführen:

1. Einen neuen leeren Datensatz am Ende der Datenmenge öffnen.

2. Der neue wird zum aktiven Datensatz gemacht.

Nach dem Aufruf von Append kann die Anwendung den Benutzern die Eingabe von Daten in die Felder des neuen Datensatzes ermöglichen. Anschließend können die Änderungen mit Post in die Datenbank oder das Änderungsprotokoll eingetragen werden (Client-Datenmengen können die im Protokoll enthaltenen Änderungen durch einen Aufruf von ApplyUpdates in die Datenbank schreiben).

Flash68 13. Dez 2011 13:01

AW: Probleme beim einfügen von neuen Datensätzen
 
Das verwende ich ja so wie ich es oben angegeben habe, aber leider fünktioniert das nicht, die Felder werden nicht leer.

DeddyH 13. Dez 2011 13:24

AW: Probleme beim einfügen von neuen Datensätzen
 
Welche Felder? Eingabefelder im Sinne von DBEdits etc.?

haentschman 13. Dez 2011 18:18

AW: Probleme beim einfügen von neuen Datensätzen
 
Hallo...

:gruebel: war das nicht so, daß dem Append automatisch ein Post folgt ? Wenn der Datensatz editiert werden soll muß wieder mit Edit in den Editiermodus versetzt werden, oder ?

Zitat:

die Felder werden nicht leer
...ich glaube er meint damit, daß der ganze Datensatz markiert ist und nicht der Cursor in einem Feld blinkt...

PS: wenn RowSelect aktiv ist bekommst du das Grid nicht in den "visuellen" Editiermodus

DeddyH 13. Dez 2011 18:24

AW: Probleme beim einfügen von neuen Datensätzen
 
Ich arbeite ja so gut wie nie mit Append und Konsorten, aber welchen Sinn sollte es haben, nach dem Append gleich ein Post folgen zu lassen? Man muss doch erst einmal die Felder belegen und dann erst wegschreiben, oder irre ich mich?

Bummi 13. Dez 2011 18:26

AW: Probleme beim einfügen von neuen Datensätzen
 
Zitat:

war das nicht so, daß dem Append automatisch ein Post folgt?
Nein, glücklicherweise nicht....

haentschman 13. Dez 2011 18:27

AW: Probleme beim einfügen von neuen Datensätzen
 
nö...

es gibt ja auch AppendRecord, da wird der Datensatz gleich mit Daten angelegt. Append erzeugt imho (lange her) einen leeren Datensatz. Diesen mußt du zum editieren erst wieder in den Edit Modus versetzen und dann mit Post wegschreiben.

Auszug aus einer Codeleiche: :zwinker:
Delphi-Quellcode:
ZQueryDetail.Append;
ZQueryDetail.Edit;
ZQueryDetail.FieldValues['KOMPO']:= 'BSK';
.
.
.
ZQueryDetail.Post;
...ich meine mich zu errinnern, daß ohne das Edit eine Fehlermeldung kam...

DeddyH 13. Dez 2011 18:28

AW: Probleme beim einfügen von neuen Datensätzen
 
Na, OK, dann klinke ich mich lieber aus (mache ja eh alles per SQL) :mrgreen:

haentschman 13. Dez 2011 18:32

AW: Probleme beim einfügen von neuen Datensätzen
 
SQL... besser ist das. 8-)

Bummi 13. Dez 2011 18:36

AW: Probleme beim einfügen von neuen Datensätzen
 
Kann man IMHO nicht generalisieren.
Bei eigenen Manipulationen sehe ich es auch so, aber (komplexe) Benutzeroberflächen fackle ich doch lieber über Komponenten ab.

haentschman 13. Dez 2011 18:40

AW: Probleme beim einfügen von neuen Datensätzen
 
Nachtrag:

hab es noch mal ausprobiert...

tataaa...das Edit ist wirklich nicht notwendig. Lieber eins zu viel als zu wenig :oops:

Mann bin ich froh von den datensensitiven Controls weg zu sein... :cheer:

Flash68 14. Dez 2011 05:44

AW: Probleme beim einfügen von neuen Datensätzen
 
mit Felder meine ich wie schon jemand schrieb die DBedits und ähnliches, ich benutze kein Grid zum Datensatz hinzufügen.

Also ich benutze sonst auch nur das Append und kein edit dazu, es funktioniert sonst immer ohne Probleme. Aber hier in dem Fall geht es nicht, selbst wenn ich meine alte Accessdatenbank als Quelle benutze.

Bummi 14. Dez 2011 06:02

AW: Probleme beim einfügen von neuen Datensätzen
 
Bist Du sicher dass Du auf dem richtigen Dataset append durchführst.
Hast Du Events im AfterInsert, hängt die Datasource richtig ....

Furtbichler 14. Dez 2011 06:24

AW: Probleme beim einfügen von neuen Datensätzen
 
Immer wieder lustig: Im OnNewRecord durch das Dataset scrollen, um z.B. eine neue Id zu erstellen.
Einige Dataset-Derivate mögen es gar nicht, wenn man im dsEdit/dsInsert-Modus ein Lookup macht.

Flash68 14. Dez 2011 07:06

AW: Probleme beim einfügen von neuen Datensätzen
 
Ich habe extra ein vereinfachtes Programm erstellt umd das ganze nachzustellen und da habe ich in meinem Datenmodul nur 3 Objekte, eine Connection, ein DataSet und eine DataSource und verweise mit dem Button wie oben direkt auf das Dataset. Im Normalfall lasse ich noch den Cursor auf das erste Feld springen und die Buttons aktivieren und deaktivieren, das hatte ich dann in der einfachen Form weggelassen. Aber beim drücken auf dem +-Button von Navigator reagiert es kommischerweise.

Bummi 14. Dez 2011 08:59

AW: Probleme beim einfügen von neuen Datensätzen
 
Zitat:

nur 3 Objekte, eine Connection, ein DataSet und eine DataSource
........
Im Normalfall lasse ich noch den Cursor auf das erste Feld springen und die Buttons aktivieren und deaktivieren, das hatte ich dann in der einfachen Form weggelassen
Wo siehst Du etwas bei Deinen 3 Objekten, wohin soll hier ein Cursor springen und welche Buttons wann wie warum "aktivieren und deaktivieren"

Hast Du mal veruschweise ein DBGrid mit angehängt, ein Showmessage ins AfterInsert eingebaut ...

:glaskugel:

vagtler 14. Dez 2011 09:17

AW: Probleme beim einfügen von neuen Datensätzen
 
Zitat:

Zitat von Bummi (Beitrag 1141294)
[...] Wo siehst Du etwas bei Deinen 3 Objekten, wohin soll hier ein Cursor springen und welche Buttons wann wie warum "aktivieren und deaktivieren" [...]

Du erwartest doch nicht etwa qualifizierte Fehlerbeschreibungen oder gar Code? :dance:

Bummi 14. Dez 2011 09:21

AW: Probleme beim einfügen von neuen Datensätzen
 
@vagtler

nicht mehr ...

Flash68 14. Dez 2011 09:34

AW: Probleme beim einfügen von neuen Datensätzen
 
das sind ja nur die Objekte für die Anbindung der Datenbank. Auf dem Form hab ich ein Grid das ganz normal den Inhalt der Tabelle zeigt und dazu die DBeditfelder zum Anzeigen bzw. eingeben/editieren.

Delphi-Quellcode:
procedure TFRM_Main.But_Neuer_RechnerClick(Sender: TObject);
begin
  DM_Rechner.ADO_DS_Rechner.Append;
  setbuttonsRechner(2);
  DBE_Rechner_Bezeichnung.SetFocus
end;
Weggelassen hatte ich für mein Testprogramm hatte ich die zeilen mit setbuttons und Setfocus da sie für das Anfügen nicht wichtig sind.


Was ich suche ist vielleicht eine Einstellung oder was ähnliches das ich eventuell vergessen haben könnte.

jobo 14. Dez 2011 09:39

AW: Probleme beim einfügen von neuen Datensätzen
 
Ist das jetzt das "vereinfachte" Programm bzw. ein Bröckchen daraus?
Was steckt hinter dem Dataset? Table? Query?

Flash68 14. Dez 2011 09:50

AW: Probleme beim einfügen von neuen Datensätzen
 
Wie gesagt ich habe einen MS SQL DB auf die wird mittels der Connection/Nativeclient zugegriffen dahinter hängt dann das Ado Dataset mit der Abfrage Select * from Rechner und das DBgrid und die DBEdits greifen dann über ein Datasource auf das Dataset zu.


PS: Es gibt keine Fehlermeldung, es passiert nur einfach nichts.

jobo 14. Dez 2011 11:01

AW: Probleme beim einfügen von neuen Datensätzen
 
Welchen Client benutzt Du?
Irgendwo ein Try Block, der nicht zuende programmiert ist?

Flash68 14. Dez 2011 11:07

AW: Probleme beim einfügen von neuen Datensätzen
 
Du meinst um auf die Datenbank zuzugreifen, den Nativeclient wie er mit dem SQL-Server ausgeliefert wird. Version-Nr. ist 10.1.

Try hab ich keinen eingebaut.

Flash68 3. Jan 2012 08:46

AW: Probleme beim einfügen von neuen Datensätzen
 
Ich habe nochmal was getestet, ich benutze normal ein Datenmodul wo die ganzen Datenbankverbindungen, Datasets etc.. drin sind, ich habe diese jetzt direct in das Formular eingebaut und dann funktioniert es. Komisch ist das es sonst mit dem Datenmodul funktioniert und hier jetzt nicht, habe es ganz normal unter uses deklariert und auch beim aufrufen von Append angegeben (DM.ADS.append; ) Mein Problem ist das es in dem Program ziemlich viele Datasets und ähnliches gibt und ich die nicht alle im Formular unterbringen kann und damit das Datenmodul brauche.

Flash

Wünsche allen ein frohes und gesundes neues Jahr.

Furtbichler 4. Jan 2012 07:46

AW: Probleme beim einfügen von neuen Datensätzen
 
Du kannst beruhigt sein. Das Problem ist nicht das Datenmodul, sondern der Quark, der irgendwo in deinem Code schlummert. Jetzt hast du dran gerüttelt und nun funktionierts. Das liegt aber nicht daran, das "Rütteln" die Lösung ist.

Es verhält sich genauso mit den guten alten Münzen, die man rubbelt, damit sie vom Münzautomaten angenommen werden. Und dabei werden sie beim 2.Versuch sowieso angenommen, aber da man nach dem 1.Versuch rubbelt, denkt man, rubbeln hilft.

Räum dein Programm auf, verteile die Daten auf Datenmodule (mehrzahl), wenns sein muss.

Oder mach eine Pause und beschäftige dich mit ORM.

Flash68 4. Jan 2012 08:55

AW: Probleme beim einfügen von neuen Datensätzen
 
Ich habe ein Testprogramm nur mit dem dem nötigsten(nur eine Tabelle) erstellt und auch da funktioniert es über das Datenmodul nicht. Also kann es meiner Meing nach nicht an dem Quark/ überflüssigem Programcode liegen.

Ab wievielen Elementen sollte mann denn ein neues Datenmodul benutzen?

Iwo Asnet 4. Jan 2012 08:59

AW: Probleme beim einfügen von neuen Datensätzen
 
Zeig doch mal den Test, der angeblich ohne Datenmodul nicht funktioniert.

Ach ja: Verknüpfungen zwischen Datenmodul und Formular (z.B. TDataset<-TDatasource), die man mit dem Designer erstellt hat, verschwinden gerne mal zwischendurch.

Desweiteren ist die Aufrufreihenfolge von Belang. Auch hier verschwinden gerne mal Verknüpfungen.

Auf der sicheren Seite bist Du, wenn z.B. das Hauptformular das Datenmodul erstellt und anschließend die Verknüpfungen per Code einrichtet.

Flash68 4. Jan 2012 10:51

AW: Probleme beim einfügen von neuen Datensätzen
 
Es funktioniert mit dem Datenmodul nicht richtig. Wenn ich die Connection, das Ado-Dataset und die DataSource in das Formular setze funktioniert es. Im Datenmodul funktioniert es dann nur über den Navigator und nicht mit append, cancel etc...

Was für Quellcode brauchst du denn?

p80286 4. Jan 2012 16:47

AW: Probleme beim einfügen von neuen Datensätzen
 
Zitat:

Zitat von Flash68 (Beitrag 1144290)
Was für Quellcode brauchst du denn?

Na für's erste das DM und die Zugriffe auf das DM!
Hast du mal den Debugger bemüht?
So richtig langweilig mit F7 nachvollzogen was passiert wenn?

Gruß
K-H

Flash68 5. Jan 2012 11:26

AW: Probleme beim einfügen von neuen Datensätzen
 
Das Datenmodul sieht wie folgt aus:

Delphi-Quellcode:
unit Datamodul;

interface

uses
  SysUtils, Classes, DB, ADODB;

type
  TDM_Rechner = class(TDataModule)
    CON_Rechner: TADOConnection;
    ADS_Rechner: TADODataSet;
    DS_Rechner: TDataSource;
    ADS_RechnerID: TAutoIncField;
    ADS_RechnerBezeichnung: TWideStringField;
    ADS_RechnerRechnertyp_ID: TIntegerField;
    ADS_RechnerStatus_ID: TIntegerField;
    ADS_RechnerBesonderheiten: TWideMemoField;
    ADS_RechnerGehäuse_ID: TIntegerField;
    ADS_RechnerNetzteil_ID: TIntegerField;
    ADS_RechnerMainboard_ID: TIntegerField;
    ADS_RechnerProzessor_ID: TIntegerField;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  DM_Rechner: TDM_Rechner;

implementation

{$R *.dfm}

end.
Die zugriffe sehen dann wie folgt aus:

Delphi-Quellcode:
procedure TFRM_Main.But_NeuClick(Sender: TObject);
begin
  DM_Rechner.ADS_Rechner.Append;
  but_Neu.Enabled:= false; but_abbrechen.Enabled:= true; bitbtn1.Enabled:= false;
  dbe_bezeichnung.SetFocus
end;

procedure TFRM_Main.But_AbbrechenClick(Sender: TObject);
begin
  DM_Rechner.ADS_Rechner.Cancel;
  DM_Rechner.ADS_Rechner.Edit;
  but_Neu.Enabled:= true; but_abbrechen.Enabled:= false;bitbtn1.Enabled:= true
end;
Mit F7 hab ich mal durch geklickt, hab aber keine Erfahrung damit und worauf ich da achten muß. Hab jetzt so nichts gesehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:56 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