Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi dbnavigator, dbgrid (https://www.delphipraxis.net/89623-dbnavigator-dbgrid.html)

vanilla 3. Apr 2007 11:33

Datenbank: access • Version: 2000 • Zugriff über: ado

dbnavigator, dbgrid
 
hallo leute,

ich möchte Veränderungen an Datensätzen, die ich in einem dbgrid angezeigt bekomme, vornehmen und diese dann auch speichern können. dafür will ich den dbnavigator verwenden, wenn ich nun ein wert im dbgrid verändere und im dbnavigator auf speichen klick, erhalte ich folgende fehlermeldung:

'key column information isinsufficient or incorrect, too many rows were affected update'

kann mir bitte einer weiterhelfen, ich check das problem nicht?? :(

mikhal 3. Apr 2007 12:17

Re: dbnavigator, dbgrid
 
Da fallen mir spontan zwei Gründe für die Fehlermeldung ein:
  • du verwendest eine Query, die mehrere Tabellen vereinigt: da kann das DataSet nicht entscheiden, wie das Update auszusehen hat.
  • du verwendest nicht das aktuellste Service-Pack für deine Delphi-Version, bei Delphi 5 nicht das aktuellste Service-Pack für das zusätzlich zu erwerbende Ado-Express.

Da du weder näheres zu deiner Delphi-Version noch das SQL-Statement deines DataSets preisgibst, kann dir keiner eine konkrete Hilfe anbieten.

Grüße
Mikhal

vanilla 3. Apr 2007 13:25

Re: dbnavigator, dbgrid
 
hi mikhal,
ich verwende delphi 7, und hier ist mein code

Delphi-Quellcode:
procedure TForm1.getDBRowValue(TableName: String; Row1: integer; Row2: integer; Row3: integer);

begin

  try

  //Verbindung zwischen ADO-Datenmengenkomponente,Datenquellenkomponente und datensensitivem Steuerelement
  DBGrid1.DataSource := DataSource1;
  DBNavigator1.DataSource := DataSource1;
  ADOTable1.Active := true;
  DataSource1.DataSet := ADOQuery1;
  ADOQuery1.SQL.Text := 'SELECT GammaWind, GammaEis, GammaEigen, GammaGeb, GammaSeil, Psi0, Psi1, Psi2 FROM '+TableName+' WHERE (((Norm)='+inttostr(Row1)+' ) and ((Kombinationsbeiwerte)='+inttostr(Row2)+' ) and ((NAD)='+inttostr(Row3)+' ) )' ;
  ADOQuery1.Connection := self.ADOConnection1;
  ADOQuery1.Open;

  except
    showmessage('Fehler: ADOQuery1 getDBRowValue()');
    exit;
  end;



end;

mikhal 3. Apr 2007 17:01

Re: dbnavigator, dbgrid
 
  • Was macht die Zeile
    Delphi-Quellcode:
    ADOTable1.Active := true;
    in deiner Procedure?
  • Welches Feld in deinem Select-Statement gibt den Primary Key wieder? Ohne ein Feld für die eindeutige Zuweisung kann im Update-Statement nicht zweifelsfrei entschieden werden, welcher Datensatz bearbeitet wird. Dein Select-Statement kann durchaus mehrere Datensätze als Ergebnis haben, welchen Datensatz soll das DataSet jetzt bearbeiten? Die Fehlermeldung gibt dir ja Auskunft darüber, dass kein Schlüsselfeld bekannt ist, und deshalb die Eindeutigkeit nicht gewährleistet ist.

Grüße
Mikhal

vanilla 4. Apr 2007 11:22

Re: dbnavigator, dbgrid
 
okay vielen dank :wink: es klappt jetzt


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 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 by Thomas Breitkreuz