![]() |
Datenbank: Access • Version: 2003 • Zugriff über: SQL, OLE
angeklickte Zeile in DBGrid1 als neuen Eintrag in DBGrid2
Wie die Überschrift bereits sagt, suche ich einen Befehl mit dem ich eine bereits im DbGrid1 angeklickte Zeile, die markiert ist, durch Knopfdruck als neuen Eintrag in DbGrid2 kopiere.
habe bereits dies ausprobiert: DbGrid2.Fields[DbGrid1.SelectedField.asString]; geht aber nicht wenn der Eintrag ein Text ist, wenn es eine Zahl ist, passiert gar nicht sprich selbst die Zahl erscheint nach dem klicken des Buttons nicht im neuen leeren DbGrid2. Hoffe jemand von euch kann mir diesbezüglich weiterhelfen. PS. habe hier schon die Suchfunktion benutzt jedoch nichts passendes gefunden..habe auch das ganze Buch: Datenbankprogrammierung mit Delphi 6/7 durchgeblättert und finde zu dieser Thematik GAR NICHTS..nur eben wie ich markierte Einträge im DBText darstellen kann. |
Re: angeklickte Zeile in DBGrid1 als neuen Eintrag in DBGrid
Das DBGrid dient nur der Visualisierung, die unterliegenden Datasets müssen für das Kopieren herangezogen werden. Wenn du mit Queries (du hast die Zugriffskomponenten nicht angegeben) arbeitest, dann ist es besonders einfach:
SQL-Code:
Grüße vom marabu
INSERT INTO target SELECT * FROM source WHERE NAME = :name
|
Re: angeklickte Zeile in DBGrid1 als neuen Eintrag in DBGrid
benutze keine Queris keine Table..habe nur ADODataSet, DataSource und eben die DbGrids,
mit den Queries habe ich keine Ahnung wie ich das anstellen soll. Du hast mir zwar den befehl gepostet aber wo soll der hin ?? ..habe dies versucht was aber wohl totaler Blödsinn ist..sorry habe aber davon gar keine Ahnung :-( ADOQuery1.DataSource := 'INSERT INTO DbGrid2.Columns.Add SELECT * FROM Datenbank Where Bezeichnung := Test'; dann bleibt ja noch die Ausgabe in DbGrid2 ..habe auch keinen Schimmer wie die lauten soll.. wäre auch dankbar, wenn ich mich irgendwo eben schlau lesen könnte falls Ihr nun keine Lust haben solltet mir den kompletten Quelltext dafür zu nennen. Danke schonmal für die Mühen!! |
Re: angeklickte Zeile in DBGrid1 als neuen Eintrag in DBGrid
Wie du deine DBGrids mit Daten belieferst (ADODataSet?) ist eigentlich egal, solange du weißt, wie du den gerade markierten Datensatz indentifizieren kannst. Und für den Kopiervorgang kannst du dann eine statische oder dynamische Komponente ADOQuery verwenden. Du musst dann etwa das hier machen:
Delphi-Quellcode:
Vorher hast du natürlich noch die richtige Connection eingetragen.
var
currentID: integer; begin with ADOQuery do begin // currentID := GetCurrentIdFromSourceGrid; SQL.Text := 'INSERT INTO target SELECT * FROM source WHERE id = :id'; Parameters.ParamValues['id'] := currentID; ExecSQL; end; end; marabu |
Re: angeklickte Zeile in DBGrid1 als neuen Eintrag in DBGrid
Zitat:
SYNTAX ERROR in INSERT INTO Statement! wenn ich es so schreibe Zitat:
dabei ist in beiden Tabelle die AutoZählfunktion als Spaltennamen ID eingetragen... keine Ahnung warum das jetzt nicht geht. wer kann helfen??? |
Re: angeklickte Zeile in DBGrid1 als neuen Eintrag in DBGrid
Guten Morgen Avax2k,
du solltest einen Schritt nach dem anderen machen. Bevor du das Kopieren mit Delphi umsetzt kannst du dich in ACCESS mit dem notwendigen SQL-Statement interaktiv vertraut machen. Da ich deine Datenbank und die betroffenen Tabellen nicht kenne, habe ich dir ein allgemein gehaltenes Statement hingeschrieben. Dieses Statement geht davon aus, dass deine beiden Tabellen exakt gleich strukturiert sind und dass es keine AutoInc-Spalte gibt. Wenn du dich mit dem INSERT-INTO-SELECT Statement anhand deiner Dokumentation vertraut gemacht hast, dann weißt du, dass du an Stelle des Sterns auch eine Spaltenliste einsetzen kannst. In deinem Fall musst du das tun, weil die Zieltabelle eine AutoInc-Spalte besitzt:
SQL-Code:
Die Spalten müssen sich von Bedeutung und Typ her entsprechen, die Namen müssen nicht in beiden Tabellen gleich sein.
INSERT INTO target(col2, col3, col4) SELECT col2, col3, col4 FROM source WHERE id = 42
Sobald du nach dem Einsetzen der korrekten Spalten- und Tabellenamen mit obigem Statement in ACCESS erfolgreich warst, übernimmst du das Statement nach Delphi. Bei der Zuweisung an ADOQuery.SQL.Text ersetzt du dann die feste Schlüsselnummer 42 durch die Parameter-Variable :id - der Name ist egal, der Doppelpunkt davor ist notwendig. Beim Setzen von SQL.Text untersucht Delphi das Statement nach solchen Parametern und stellt sie automatisch in der Eigenschaft ADOQuery.Parameters zur Verfügung, wenn ADOQuery.ParamCheck = TRUE ist (Standard). Nachdem du dann den Parameter 'id' (diesmal ohne Doppelpunkt) mit dem gewünschten Schlüsselwert initialisiert hast, kannst du das Statement ausführen. Die von dir berichteten Fehler passen irgendwie nicht zu der von dir beschriebenen Vorgehensweise. Kann es sein, dass du beides vertauscht hast? Wenn der Parameter 'id' nicht bekannt ist, dann hast du den Doppelpunkt im SQL-Statement vergessen oder ParamCheck ist bei dir FALSE. Jetzt tief Luft holen und systematisch vorgehen... Freundliche Grüße vom marabu |
Re: angeklickte Zeile in DBGrid1 als neuen Eintrag in DBGrid
Zitat:
Danke marabu für deine Hilfestellung!! |
Re: angeklickte Zeile in DBGrid1 als neuen Eintrag in DBGrid
Keine Panik.
Wenn du ACCESS öffnest, dann solltest du eine Übersicht finden, in der Tabellen, Reports, etc. aufgeführt werden. Unter Tabellen findest du die dir vertrauten Tabellen-Namen. Es sollte auch ein Punkt Abfragen bzw. Auswertungen oder Sichten (den genauen Namen kann ich dir nicht sagen, da ich nicht mit diesem Produkt arbeite) vorhanden sein, der bei dir allerdings leer sein wird. Wenn du diesen Punkt auswählst und dort im Kontextmenü "Neue Abfrage" auswählst, dann solltest du einen SQL-Designer vorfinden. Über einen Schalter in der Symbolleiste müsstest du ein SQL-Fenster öffnen können, in dem du ein beliebiges Statement eingeben und von dort auch ausführen kannst. Die Query in Delphi ist etwas ähnliches. Während die Abfragen in ACCESS gespeichert werden und eigentlich Views darstellen, ist die von mir angesprochene Query in Delphi dynamisch und das Ergebnis existiert nur so lange wie du es im Programm brauchst. Das SQL-Fenster in ACCESS brauchst du eigentlich nur zum Spielen und Üben. Dein Delphi-Programm kannst du auch ohne diesen Zwischenschritt schreiben. Ich wusste nicht, dass du auch mit ACCESS auf Kriegsfuß stehst. Ich könnte dir einen Programmrohling erstellen, wenn du mir eine Datenbank mit deinen Tabellen zur Verfügung stellst. Die Tabellen sollten natürlich leer sein. marabu |
Re: angeklickte Zeile in DBGrid1 als neuen Eintrag in DBGrid
Zitat:
|
Re: angeklickte Zeile in DBGrid1 als neuen Eintrag in DBGrid
Wenn deinem DBGrid2 ein AdoDataSet unterliegt, dann kannst du mit dessen Methode ReQuery das Grid aktualisieren.
marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz