如何在使用新的ODBC dbExpress驱动程序的TSQLConnection中使用TSQLMonitor的技巧?

38
我一直在测试随 Delphi XE2 提供的新 ODBC dbExpress 驱动程序,并发现 TSQLMonitor 似乎无法正常工作。考虑到可能是组件配置不正确,我将 TSQLMonitor 连接到使用 MS SQL dbExpress 驱动程序的 TSQLConnection 上,那样就可以正常工作了。
在网上我没有看到任何关于这个问题的帖子。还有其他人注意到这个问题吗?它是否似乎是一个错误、一个不支持的功能(不能监视使用 ODBC 驱动程序的 TSQLConnection),或者在这种情况下配置 TSQLMonitor 的技巧?

你试过使用追踪派生驱动程序吗?它可以增加SQLMonitor的结果,可能会很有用。如果ODBC驱动程序是一个完全本地的驱动程序(就像我想的那样),它可能无法像“旧”的基于Dll的驱动程序那样工作.... - Marco Cantù
1
Marco:这是一个很好的建议。将TSQLConnection连接到ODBC驱动程序后,扩展TSQLConnection的Driver属性,将驱动程序的DelegateConnection属性设置为DBXTrace。然后扩展DelegateConnection属性,并将TraceFile设置为True和TraceFile设置为文件名(按照您的建议)。感谢您提供的解决方法。我仍然想知道是否有人知道如何解决TSQLMonitor的问题。 - Cary Jensen
@Marco Cantù:有点离题,但请您考虑一下这个帖子 - menjaraz
1
我相信您已经知道这些链接,但以防万一,我会在这里发布它们。 :)                                                                   Tutorial: 使用ODBC连接使用TSQLMonitor使用TSQLMonitor调试dbExpress应用程序 - Mike
@Mike,你的评论听起来像是一个答案 ;) - Maciej Los
1个回答

1

Try this out:

procedure TForm2.Button1Click(Sender: TObject);
begin
  try
    Connect;
    SQLMonitor1.SQLConnection := SQLConnection1;
    SQLMonitor1.Active := True;
    ExecuteQueries;
    SQLMonitor1.SaveToFile('D:\\Log.txt');
  except
    on E: Exception do
      ShowMessage('Exception ocurred!: ' + E.Message);
  end;
end;

procedure TForm2.Connect;
begin
  SQLConnection1 := TSQLConnection.Create(nil);
  SQLConnection1.ConnectionName := 'odbcinterbaseconnection';
  SQLConnection1.LoginPrompt := False;
  SQLConnection1.LoadParamsOnConnect := True;
  SQLConnection1.Connected := True;
end;

procedure TForm2.ExecuteQueries;
var
  Query: String;
begin
  try
    if SQLConnection1.Connected then
    begin
      Query := 'CREATE TABLE ExampleTable(id INTEGER, name VARCHAR(50))';
      SQLConnection1.Execute(Query, nil);
      Query := 'INSERT INTO ExampleTable VALUES(1,''test1'')';
      SQLConnection1.Execute(Query, nil);
      Query := 'INSERT INTO ExampleTable VALUES(2,''test2'')';
      SQLConnection1.Execute(Query, nil);
      Query := 'INSERT INTO ExampleTable VALUES(3,''test3'')';
      SQLConnection1.Execute(Query, nil);
      Query := 'SELECT * FROM ExampleTable';
      SQLConnection1.Execute(Query, nil);
    end;
  except
    on E: Exception do
      ShowMessage('Exception ocurred!: ' + E.Message);
  end;
end;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接