AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi angeklickte Zeile in DBGrid1 als neuen Eintrag in DBGrid2
Thema durchsuchen
Ansicht
Themen-Optionen

angeklickte Zeile in DBGrid1 als neuen Eintrag in DBGrid2

Ein Thema von Avax2k · begonnen am 24. Okt 2005 · letzter Beitrag vom 25. Okt 2005
Antwort Antwort
Seite 2 von 3     12 3      
Avax2k

Registriert seit: 6. Okt 2005
186 Beiträge
 
Delphi 2005 Professional
 
#11

Re: angeklickte Zeile in DBGrid1 als neuen Eintrag in DBGrid

  Alt 25. Okt 2005, 15:25
wie zu erwarten bekomme ich selbst das nicht hin...gebe ein ADODataSet2.Requery();

nichts tut sich..in der Delphi Hilfe kommt auch nicht wie man den befehl verwenden soll..
auch mit ADODataSet2.Close;
und gleich ADODATASet2.Open;
lässt sich das DbGrid2 nicht aktualisieren, obwohl refresh ja auch nur das gleiche tut
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#12

Re: angeklickte Zeile in DBGrid1 als neuen Eintrag in DBGrid

  Alt 25. Okt 2005, 17:48
Habe mir die Northwind-Demo-Datenbank für ACCESS besorgt. Darin erzeuge ich mir zwei Tabellen ORIGINAL und KOPIE mit (ID, NACHNAME, VORNAME) als Spalten. So wird kopiert mit anschließendem Requery:

Delphi-Quellcode:
const
  SQL_COPY
    = 'INSERT INTO kopie (id, nachname, vorname) '
    + 'SELECT id, nachname, vorname FROM original '
    + 'WHERE id = :id';

procedure TDemoForm.btnCopyClick(Sender: TObject);
var
  id: integer;
begin
  id := ADODataSet1.FieldValues['id'];
  with ADOQuery do
  begin
    SQL.Text := SQL_COPY;
    Parameters.ParseSQL(SQL.Text, true);
    Parameters.ParamValues['id'] := id;
    try
      ExecSQL;
      ADODataSet2.Requery([]);
    except
      on E: Exception do
        ShowMessage(E.Message);
    end;
  end;
end;
Wenn du das Demo-Projekt öffnest, dann musst du in der ADOConnection den Pfad zur Datenbank anpassen. Kannst auch deine eigene eintragen. Die beiden Testtabellen werden beim Programmstart erzeugt und du kannst sie mit dem Drop-Button wieder in den Eimer treten.

Viel Spaß

marabu
Angehängte Dateien
Dateityp: zip adocopy_184.zip (2,6 KB, 13x aufgerufen)
  Mit Zitat antworten Zitat
Avax2k

Registriert seit: 6. Okt 2005
186 Beiträge
 
Delphi 2005 Professional
 
#13

Re: angeklickte Zeile in DBGrid1 als neuen Eintrag in DBGrid

  Alt 25. Okt 2005, 18:43
Danke für die Zip, hast mir wirklich weiter geholfen!!

wenn ich den ADOData AfterConnection Befehl raus nehme dann geht aber gar nichts mehr..somit war es auch unmöglich vorher nur mit dem Query und DataSet die Aktualisierung zu schaffen.

Außerdem verstehe ich nicht wieso sich die befehle wiederholen müssen damit es funktioniert..sprich die After.Connection macht ja nur das was der Copy Button macht sprich benutzt den selben Befehl..das alles scheint für mich ein Rätsel zu sein, wozu man es braucht ..
Ohne deine Hilfe wäre ich gar nicht darauf gekommen..jetzt muss ich es nur noch irgendwie hinbekommen in mein Programm dass alles zu implementieren..wobei ich den After.Connection Event gar nicht gefunden habe..den gibt es gar nicht wenn man auf Events bei dem klickt ... naja
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#14

Re: angeklickte Zeile in DBGrid1 als neuen Eintrag in DBGrid

  Alt 25. Okt 2005, 19:36
Zitat von Avax2k:
wenn ich den ADOData AfterConnection Befehl raus nehme dann geht aber gar nichts mehr
Weil ich da die beiden Tabellen zum Spielen erzeuge. In deiner Anwendung existieren die richtigen Tabellen ja schon, also brauchst du dort dieses event nicht.

Zitat von Avax2k:
sprich die After.Connection macht ja nur das was der Copy Button macht
Na, da hast du dich aber gewaltig verguckt. AfterConnection() erzeugt zwei Tabellen und btnCopyClick() kopiert einen markierten Datensatz aus ORIGINAL nach KOPIE.

marabu
  Mit Zitat antworten Zitat
Avax2k

Registriert seit: 6. Okt 2005
186 Beiträge
 
Delphi 2005 Professional
 
#15

Re: angeklickte Zeile in DBGrid1 als neuen Eintrag in DBGrid

  Alt 25. Okt 2005, 20:25
ja stimmt, habe mich wirklich verguckt..sorry deswegen.

was aber nicht geklärt ist, wieso funktioniert nun der Refresh Bfefehl nicht wenn man die After.Connection weglässt..sprich wenn man schon die Tabellen hat und nicht erstellt und keine ADOConnection verwendet geht es bei mir nicht.

ich verwende nur DataSource, Dataset, Query und die DbGrids sollte ja ausreichen da ja die After Connection nur dazu benutzt wird um die Tabellen zu erstellen.

Sorry wenn ich nerven sollte, aber wenn man wie ich den ganzen tag damit verbringt es zum Laufen zu bringen und trotz der von dir bereits funktionierenden Lösung es immer noch nicht begreift..kommt ein wenig der Frust auf

hinzu kommt noch, dass wenn man bei deiner Lösung die AfterConnection auch nach dem ersten Start weglässt, die Refresh FUnktion nicht geht..wenn du Lust und Zeit hast wäre es gut wenn du das bestätigen könntest.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#16

Re: angeklickte Zeile in DBGrid1 als neuen Eintrag in DBGrid

  Alt 25. Okt 2005, 21:03
Zitat von Avaxk2:
da ja die After Connection nur dazu benutzt wird um die Tabellen zu erstellen
Die letzten zwei Befehle in AfterConnect() öffnen die beiden Spiel-Tabellen und müssen in meiner Demo auf jeden Fall weiter vorhanden sein!! Wenn das Open nicht ausgeführt wird, dann dürftest du in meiner Demo nicht nur mit dem Requery (warum schreibst du Refresh?) Probleme haben...

marabu
  Mit Zitat antworten Zitat
Avax2k

Registriert seit: 6. Okt 2005
186 Beiträge
 
Delphi 2005 Professional
 
#17

Re: angeklickte Zeile in DBGrid1 als neuen Eintrag in DBGrid

  Alt 25. Okt 2005, 21:08
in meinem Programm habe ich den Übernehmen-Knopf so geschrieben:

Zitat:
procedure TForm1.Button1Click(Sender: TObject);
begin
with ADOQuery1 do
begin
SQL.Text := 'INSERT INTO Kopie SELECT * FROM Datenbank WHERE ID = :ID';
Parameters.ParseSQL(SQL.Text, true);
Parameters.ParamValues['ID'] := AdoDataSet1.FieldValues['ID'];
ExecSQL;
AdoDataSet2.Requery([]);
end;
wie du siehst habe ich in meiner Datenbank 2 Tables..der eine heißt Kopie und der andere Datenbank.
Wenn ich nun auf den Button drücke wird das was ich angeklickt habe auch kopiert..nur eben das DbGrid2 welches von DataSet2 gefüttert wird, wird erst nach neustart der Applikation aktualisiert, obwohl der Refresh des AdoDataset2 drin ist und funktionieren müsste..tut er das aber nicht und ich weiss jetzt eben nicht warum.

eine Connection brauche ich dafür nicht..oder etwa doch ??
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#18

Re: angeklickte Zeile in DBGrid1 als neuen Eintrag in DBGrid

  Alt 25. Okt 2005, 21:13
Du brauchst nur eine Connection pro Datenbank. Es irritiert übrigens, wenn du eine Tabelle mit DATENBANK benennst, aber das nur nebenbei. Wenn deine Daten zwar kopiert, aber nicht angezeigt werden, dann verrate mir mal, welchen IsolationLevel du bei deiner Connection eingestellt hast.

marabu
  Mit Zitat antworten Zitat
Avax2k

Registriert seit: 6. Okt 2005
186 Beiträge
 
Delphi 2005 Professional
 
#19

Re: angeklickte Zeile in DBGrid1 als neuen Eintrag in DBGrid

  Alt 25. Okt 2005, 21:21
IsolationsLevel ist ilCursorStability
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#20

Re: angeklickte Zeile in DBGrid1 als neuen Eintrag in DBGrid

  Alt 25. Okt 2005, 21:30
Ich verwende den gleichen IsolationLevel und bei mir funktioniert es. Bei den von dir verwendeten Namen unterstelle ich mal, dass du mit einer Testapplikation auf einer Testdatenbank arbeitest. Wenn da keine geheimen Daten drin stehen und du magst, kannst du Quellen PAS, DFM, DPR, RES und Daten MDB einpacken und hier einstellen oder auch per PN an mich. Ich weiß sonst nicht wie ich dir weiter helfen kann, denn meine Demo funktioniert doch auch bei dir, wenn du das Open im AfterConnect() ausführst - oder?

marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 23:35 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