ポイントを注意することはデルファイTADOQueryにrowsAffectedプロパティを使用している場合

テスト環境:デルファイ6、オラクル、PLSQL

模擬テストデータテーブルを作成し、いくつかのシミュレートされたデータを追加

create table practice(uno varchar(8), uname varchar(20)); insert into practice values ('1', '1'); insert into practice values ('1', '1'); insert into practice values ('2', '2'); insert into practice values ('1', '1'); commit; 

本明細書で使用する場合、TADOConnectionのは、TADOQueryは制御、設定コントロールのプロパティの仕方をドラッグしていないが、直接、希望がコントロールの使用例を参照してください場合は、コードを書くことによって、あなたが見ることができます:DelphiのデータベースプログラミングをADOを使用して

ADOQueryは、SQLを実行使用した後、あなたはにrowsAffectedによって得ることができますSQLのデータテーブルのプロパティデータの数行に影響を与えるが、それにはない注意を払う可能性が高いにrowsAffectedを使用する必要があります場合は、別のは、SQLステッチの形に応じて、異なる効果を有することができます問題が発生したときに、それを表示するには、以下のコードを、SQLの二つの形式の異なる効果を示すために2つのボタンがあります。

コード論理演算と効果があって、プログラムの中で説明されます

  • データベース接続文字列
  • ADOQueryと使用ADO接続
  • SQLは、最後にrowsAffectedの値の影響をステッチの異なる方法につながります
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, StdCtrls;

type
  TForm1 = class(TForm) btn1: TButton; btn2: TButton; procedure btn1Click(Sender: TObject); procedure btn2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.btn1Click(Sender: TObject); var adoConnection: TAdoConnection; adoQuery: TAdoQuery; sql: string; count: Integer; begin adoConnection:= TAdoConnection.Create(nil); adoConnection.ConnectionString := 'Provider=OraOLEDB.Oracle.1;Persist Security Info=False;Data Source=TestSource' ; adoConnection.Open('testUser', 'testPassword'); //第一个参数是用户名,第二个参数是密码 //或者可以将用户名密码的信息放到数据库连接串,然后直接调用adoConnection.Open;而不是adoConnection.Open('testUser', 'testPassword'); //adoConnection.ConnectionString := 'Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=testUser;Password=testPassword;Data Source=TestSource' ; //adoConnection.Open; adoQuery:= TADOQuery.Create(nil); adoQuery.Connection := adoConnection; //这种方式拼接的SQL最后执行之后获取的RowsAffected是真正被更新的行数 sql:= 'UPDATE practice SET uname = ''test'' where uno = ''1'' '; //这种时候SQL的结尾不要有 ; adoquery.SQL.Text:= sql; {如果在PLSQL中执行上面的SQL,那么需要添加Commit才能真正修改 但是在代码中使用这样的SQL,并且通过adoQuery.ExecSQL;方式执行SQL,其实不需要在拼接的SQL中显式添加Commit的,会自动提交的 } //使用这种方式拼接的SQL,执行之后获取的RowsAffected总是1 sql:= 'UPDATE practice SET uname = ''test'' where uno = ''10''; '; //这种时候SQL的结尾必须要有 ; adoquery.SQL.Text:= 'Begin ' + sql + ' Commit; End;'; count:= adoQuery.ExecSQL; //执行adoQuery.ExecSQL的返回值其实就是等于adoQuery.RowsAffected的值 //ShowMessage('修改了' + IntToStr(count) + ' 条记录'); ShowMessage('修改了' + IntToStr(adoQuery.RowsAffected) + ' 条记录'); //使用上面制造的那样的模拟数据,这里的弹出显示: 修改了3条记录 adoQuery.Free; adoConnection.Free; end; procedure TForm1.btn2Click(Sender: TObject); var adoConnection: TAdoConnection; adoQuery: TAdoQuery; sql: string; count: Integer; begin adoConnection:= TAdoConnection.Create(nil); adoConnection.ConnectionString := 'Provider=OraOLEDB.Oracle.1;Persist Security Info=False;Data Source=TestSource' ; adoConnection.Open('testUser', 'testPassword'); //第一个参数是用户名,第二个参数是密码 //或者可以将用户名密码的信息放到数据库连接串,然后直接调用adoConnection.Open;而不是adoConnection.Open('testUser', 'testPassword'); //adoConnection.ConnectionString := 'Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=testUser;Password=testPassword;Data Source=TestSource' ; //adoConnection.Open; adoQuery:= TADOQuery.Create(nil); adoQuery.Connection := adoConnection; //使用这种方式拼接的SQL(在原有的SQL中加了commit;),执行之后获取的RowsAffected总是1 //就算其没有更新任何一行,最后RowsAffected值会是1,就算其更新了10行,最后RowsAffected的值还是1 sql:= 'UPDATE practice SET uname = ''test'' where uno = ''10''; '; //这种时候SQL的结尾必须要有 ; adoquery.SQL.Text:= 'Begin ' + sql + ' Commit; End;'; count:= adoQuery.ExecSQL; //执行adoQuery.ExecSQL的返回值其实就是等于adoQuery.RowsAffected的值 //ShowMessage('修改了' + IntToStr(count) + ' 条记录'); ShowMessage('修改了' + IntToStr(adoQuery.RowsAffected) + ' 条记录'); //使用上面制造的那样的模拟数据,这里的弹出显示: 修改了1条记录 adoQuery.Free; adoConnection.Free; end; end. 

サイドノートデータベース接続文字列

データベース接続文字列adoConnection.ConnectionString:= 'プロバイダ= OraOLEDB.Oracle.1;ユーザーID = testuserを;パスワード= testPassword;データソース=は、TestSourceセキュリティ情報= Falseのを永続';

  • プロバイダー:データベース駆動型
  • セキュリティ情報を永続:
  • ユーザーID:ユーザーデータベース
  • パスワード:ユーザデータベースに対応するパスワード
  • データソース:データソースの解釈は、データソースは、関連するデータベース構成ファイルの下に見ることができます

補足:tnsnames.oraファイル

実際には、接続情報の最終的な構成は、構成ファイルのtnsnames.oraに保存されたときに私たちは、オラクルのOracleクライアントでの接続情報を設定します

TNSNAMES.ORAは、以下の例のみを示すように、Aは、このような複数するデータソースとして、接続情報データベースに情報を配置しました

#TestSource就是数据源的名称,和数据库连接串中的Data Source=TestSource 相对应
TestSource =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.88.79)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

 

お粥のような良いコード、時間と一緒に煮ています
 
転送:https://www.cnblogs.com/jijm123/p/11303605.html

テスト環境:デルファイ6、オラクル、PLSQL

模擬テストデータテーブルを作成し、いくつかのシミュレートされたデータを追加

create table practice(uno varchar(8), uname varchar(20)); insert into practice values ('1', '1'); insert into practice values ('1', '1'); insert into practice values ('2', '2'); insert into practice values ('1', '1'); commit; 

本明細書で使用する場合、TADOConnectionのは、TADOQueryは制御、設定コントロールのプロパティの仕方をドラッグしていないが、直接、希望がコントロールの使用例を参照してください場合は、コードを書くことによって、あなたが見ることができます:DelphiのデータベースプログラミングをADOを使用して

ADOQueryは、SQLを実行使用した後、あなたはにrowsAffectedによって得ることができますSQLのデータテーブルのプロパティデータの数行に影響を与えるが、それにはない注意を払う可能性が高いにrowsAffectedを使用する必要があります場合は、別のは、SQLステッチの形に応じて、異なる効果を有することができます問題が発生したときに、それを表示するには、以下のコードを、SQLの二つの形式の異なる効果を示すために2つのボタンがあります。

コード論理演算と効果があって、プログラムの中で説明されます

  • データベース接続文字列
  • ADOQueryと使用ADO接続
  • SQLは、最後にrowsAffectedの値の影響をステッチの異なる方法につながります
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, StdCtrls;

type
  TForm1 = class(TForm) btn1: TButton; btn2: TButton; procedure btn1Click(Sender: TObject); procedure btn2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.btn1Click(Sender: TObject); var adoConnection: TAdoConnection; adoQuery: TAdoQuery; sql: string; count: Integer; begin adoConnection:= TAdoConnection.Create(nil); adoConnection.ConnectionString := 'Provider=OraOLEDB.Oracle.1;Persist Security Info=False;Data Source=TestSource' ; adoConnection.Open('testUser', 'testPassword'); //第一个参数是用户名,第二个参数是密码 //或者可以将用户名密码的信息放到数据库连接串,然后直接调用adoConnection.Open;而不是adoConnection.Open('testUser', 'testPassword'); //adoConnection.ConnectionString := 'Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=testUser;Password=testPassword;Data Source=TestSource' ; //adoConnection.Open; adoQuery:= TADOQuery.Create(nil); adoQuery.Connection := adoConnection; //这种方式拼接的SQL最后执行之后获取的RowsAffected是真正被更新的行数 sql:= 'UPDATE practice SET uname = ''test'' where uno = ''1'' '; //这种时候SQL的结尾不要有 ; adoquery.SQL.Text:= sql; {如果在PLSQL中执行上面的SQL,那么需要添加Commit才能真正修改 但是在代码中使用这样的SQL,并且通过adoQuery.ExecSQL;方式执行SQL,其实不需要在拼接的SQL中显式添加Commit的,会自动提交的 } //使用这种方式拼接的SQL,执行之后获取的RowsAffected总是1 sql:= 'UPDATE practice SET uname = ''test'' where uno = ''10''; '; //这种时候SQL的结尾必须要有 ; adoquery.SQL.Text:= 'Begin ' + sql + ' Commit; End;'; count:= adoQuery.ExecSQL; //执行adoQuery.ExecSQL的返回值其实就是等于adoQuery.RowsAffected的值 //ShowMessage('修改了' + IntToStr(count) + ' 条记录'); ShowMessage('修改了' + IntToStr(adoQuery.RowsAffected) + ' 条记录'); //使用上面制造的那样的模拟数据,这里的弹出显示: 修改了3条记录 adoQuery.Free; adoConnection.Free; end; procedure TForm1.btn2Click(Sender: TObject); var adoConnection: TAdoConnection; adoQuery: TAdoQuery; sql: string; count: Integer; begin adoConnection:= TAdoConnection.Create(nil); adoConnection.ConnectionString := 'Provider=OraOLEDB.Oracle.1;Persist Security Info=False;Data Source=TestSource' ; adoConnection.Open('testUser', 'testPassword'); //第一个参数是用户名,第二个参数是密码 //或者可以将用户名密码的信息放到数据库连接串,然后直接调用adoConnection.Open;而不是adoConnection.Open('testUser', 'testPassword'); //adoConnection.ConnectionString := 'Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=testUser;Password=testPassword;Data Source=TestSource' ; //adoConnection.Open; adoQuery:= TADOQuery.Create(nil); adoQuery.Connection := adoConnection; //使用这种方式拼接的SQL(在原有的SQL中加了commit;),执行之后获取的RowsAffected总是1 //就算其没有更新任何一行,最后RowsAffected值会是1,就算其更新了10行,最后RowsAffected的值还是1 sql:= 'UPDATE practice SET uname = ''test'' where uno = ''10''; '; //这种时候SQL的结尾必须要有 ; adoquery.SQL.Text:= 'Begin ' + sql + ' Commit; End;'; count:= adoQuery.ExecSQL; //执行adoQuery.ExecSQL的返回值其实就是等于adoQuery.RowsAffected的值 //ShowMessage('修改了' + IntToStr(count) + ' 条记录'); ShowMessage('修改了' + IntToStr(adoQuery.RowsAffected) + ' 条记录'); //使用上面制造的那样的模拟数据,这里的弹出显示: 修改了1条记录 adoQuery.Free; adoConnection.Free; end; end. 

サイドノートデータベース接続文字列

データベース接続文字列adoConnection.ConnectionString:= 'プロバイダ= OraOLEDB.Oracle.1;ユーザーID = testuserを;パスワード= testPassword;データソース=は、TestSourceセキュリティ情報= Falseのを永続';

  • プロバイダー:データベース駆動型
  • セキュリティ情報を永続:
  • ユーザーID:ユーザーデータベース
  • パスワード:ユーザデータベースに対応するパスワード
  • データソース:データソースの解釈は、データソースは、関連するデータベース構成ファイルの下に見ることができます

補足:tnsnames.oraファイル

実際には、接続情報の最終的な構成は、構成ファイルのtnsnames.oraに保存されたときに私たちは、オラクルのOracleクライアントでの接続情報を設定します

TNSNAMES.ORAは、以下の例のみを示すように、Aは、このような複数するデータソースとして、接続情報データベースに情報を配置しました

#TestSource就是数据源的名称,和数据库连接串中的Data Source=TestSource 相对应
TestSource =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.88.79)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

 

おすすめ

転載: www.cnblogs.com/railgunman/p/12121203.html