标签: ado

Delphi中的BDE与ADO

请注意下面的编辑以获取更多信息,以及可能的解决方案

我们最近修改了一个大型Delphi应用程序,以使用ADO连接和查询而不是BDE连接和查询.自那次改变以来,表现变得非常糟糕.

我已经分析了应用程序,瓶颈似乎是在实际调用TADOQuery.Open.换句话说,除了重构应用程序以减少实际使用数据库之外,从代码角度来看,我无法做很多事情来改进这一点.

有没有人有关于如何提高ADO连接的Delphi应用程序性能的建议?我已经尝试了这里给出的两个建议,几乎没有任何影响.

为了了解性能差异,我对相同的大型操作进行了基准测试:

  • 在BDE下:11秒

  • 在ADO下:73秒

  • 在该文章引用的更改之后的ADO下:72秒

我们在客户端 - 服务器环境中使用Oracle后端.本地计算机每个都保持与数据库的单独连接.

对于记录,连接字符串如下所示:

const
  c_ADOConnString = 'Provider=OraOLEDB.Oracle.1;Persist Security Info=True;' +
                    'Extended Properties="plsqlrset=1";' +
                    'Data Source=DATABASE.DOMAIN.COM;OPTION=35;' +
                    'User ID=******;Password=*******';
Run Code Online (Sandbox Code Playgroud)

回答zendar提出的问题:

我在Windows Vista和XP上使用Delphi 2007.

后端是Oracle 10g数据库.

如连接字符串所示,我们使用的是OraOLEDB驱动程序.

我的基准测试机器上的MDAC版本是6.0.

编辑:

在BDE下,我们有很多代码如下:

procedure MyBDEProc;
var
  qry: TQuery;
begin
  //fast under BDE, but slow under ADO!!
  qry := TQuery.Create(Self);
  try
    with qry do begin
      Database := g_Database;
      Sql.Clear;
      Sql.Add('SELECT');
      Sql.Add('  FIELD1');
      Sql.Add(' ,FIELD2');
      Sql.Add(' ,FIELD3');
      Sql.Add('FROM');
      Sql.Add('  TABLE1');
      Sql.Add('WHERE SOME_FIELD …
Run Code Online (Sandbox Code Playgroud)

delphi oracle performance ado bde

13
推荐指数
2
解决办法
1万
查看次数

存储过程中的经典ADO和表值参数

有没有办法通过经典的ADO将表值参数传递给SQL Server中的存储过程?

sql-server vb6 stored-procedures ado

12
推荐指数
2
解决办法
5171
查看次数

使用ADO连接到Sun LDAP

我想用Delphi程序连接(并获取用户组)到Sun LDAP服务器.我认为ADSI只适用于Microsoft LDAP.我尝试使用ADO,但我无法连接.

有人可以显示一些代码我会怎么做?

delphi ado ldap sun

12
推荐指数
1
解决办法
1152
查看次数

让VB6 ADO应用程序在Windows 7中工作

我已经继承了几个目前无法在.NET中重写的旧VB6应用程序.这些旧的应用程序都使用ADO,并在我的XP机器上正常编译.自从切换到Windows 7机器后,应用程序编译得很好,但是当它们部署时(在XP机器上),我会收到错误.这是Microsoft文章讨论的一个已知问题:

http://support.microsoft.com/kb/2517589

本文给出了一个解决方法的非常详细的解释,其中涉及复制".TLB"文件并使用"regtlibv12"注册它.当我尝试注册它时,我收到以下错误消息:

C:\ Program Files\Common Files\System\ado\msado60_Backcompat.tlb的RegisterTypeLib失败:80029c4a

我也尝试使用Windows文件夹中的旧"regtlib.exe"注册这个,但是出现了这个错误:

C:\ Program Files\Common Files\System\ado\msado60_Backcompat.tlb的LoadTypeLib失败:80029c4a

因此,我无法继续进行这项工作.我将非常感谢任何人可以给我如何正确注册此文件的任何指导.

先感谢您!

vb6 ado windows-7

12
推荐指数
2
解决办法
3万
查看次数

使用Javascript读取和写入访问数据库

首先,我想提一下,我知道在与数据库的Web交互中,
由于安全原因应该始终使用服务器端语言,并且因为javascript
不提供并且与Windows文件系统兼容.

那说我面临着一种情况,我正在努力创造性思考.
我不允许任何访问服务器端脚本和SQL.

我需要为Intranet创建一个基于客户端的应用程序,该应用程序能够随着时间的推移存储数据.

到目前为止,我找到了2个解决方案,但没有一个有足够的文档供我正确使用.

一个是名为ACCESSdb的javascript库,可以在这里找到:ACCESSdb很
遗憾我无法理解如何使用它来写入或读取数据库中的数据...

另外就是那3段代码:

添加记录:

function AddRecord() {
var adoConn = new ActiveXObject("ADODB.Connection");
var adoRS = new ActiveXObject("ADODB.Recordset");

adoConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='/\dbName.mdb'");
adoRS.Open("Select * From tblName", adoConn, 1, 3);

adoRS.AddNew;
adoRS.Fields("FieldName").value = "Quentin";
adoRS.Update;

adoRS.Close();
adoConn.Close();
}  
Run Code Online (Sandbox Code Playgroud)

删除记录:

function DeleteRecord() {
var adoConn = new ActiveXObject("ADODB.Connection");
var adoRS = new ActiveXObject("ADODB.Recordset");

adoConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='\\dbName.mdb'");
adoRS.Open("Select * From tblName Where FieldName = 'Quentin'", adoConn, 1, 3);
adoRS.Delete;
adoRS.Delete;

adoRS.Close();
adoConn.Close();
}  
Run Code Online (Sandbox Code Playgroud)

编辑记录:

function EditRecord() {
var adoConn …
Run Code Online (Sandbox Code Playgroud)

javascript database ms-access activex ado

12
推荐指数
1
解决办法
6万
查看次数

使用Python从PowerPivot模型中提取原始数据

当我不得不使用Python从PowerPivot模型中读取一些数据时,看起来像是一项微不足道的任务变成了一场真正的噩梦.我相信我在过去的几天里对此进行了很好的研究,但现在我遇到了一堵砖墙,并希望得到Python/SSAS/ADO社区的一些帮助.

基本上,我想要的是以编程方式访问存储在PowerPivot模型中的原始数据 - 我的想法是通过下面列出的方法之一连接到底层的PowerPivot(即MS Analysis Services)引擎,列出模型中包含的表,然后使用简单的DAX查询(类似EVALUATE (table_name))从每个表中提取原始数据.容易腻,对吗?好吧,也许不是.

0.一些背景资料

如您所见,我尝试了几种不同的方法.我会尝试尽可能仔细地记录所有内容,以便那些不熟悉PowerPivot功能的人会很清楚我想做什么.

首先,有关编程访问Analysis Services引擎的一些背景知识(它说2005 SQL Server,但它应该仍然适用):SQL Server数据挖掘可编程性用于Analysis Services连接的数据提供程序.

我将在下面的示例中使用的示例Excel/PowerPivot文件可以在此处找到:Microsoft PowerPivot for Excel 2010和Excel 2013示例中的PowerPivot.

另请注意,我使用的是Excel 2010,因此我的一些代码是特定于版本的.例如,wb.Connections["PowerPivot Data"].OLEDBConnection.ADOConnection应该是wb.Model.DataModelConnection.ModelConnection.ADOConnection,如果你使用Excel 2013.

我将在整个问题中使用的连接字符串基于以下信息:使用C#连接到PowerPivot引擎.另外,一些方法显然需要在数据检索之前对PowerPivot模型进行某种初始化.请参见此处:从VBA自动执行PowerPivot Refresh操作.

最后,这里有几个链接显示这应该是可以实现的(但请注意,这些链接主要是指C#,而不是Python):

1.使用ADOMD

import clr
clr.AddReference("Microsoft.AnalysisServices.AdomdClient")
import Microsoft.AnalysisServices.AdomdClient as ADOMD
ConnString = "Provider=MSOLAP;Data Source=$Embedded$;Locale Identifier=1033;
             Location=H:\\PowerPivotTutorialSample.xlsx;SQLQueryMode=DataKeys"

Connection = ADOMD.AdomdConnection(ConnString)
Connection.Open()
Run Code Online (Sandbox Code Playgroud)

在这里,似乎问题是PowerPivot模型尚未初始化:

AdomdConnectionException: A connection cannot be …
Run Code Online (Sandbox Code Playgroud)

python excel ssas ado powerpivot

12
推荐指数
1
解决办法
5086
查看次数

Visual Studio 2017的"选择数据源"中没有出现Mysql

正如您所看到的,我已经安装了必要的mysql软件包,例如Visual Studio和Connector/NET的Mysql,但无论mysql在Visual Studio 2017数据源菜单中出现什么,有什么建议吗?:在此输入图像描述

在此输入图像描述

c# mysql datasource ado visual-studio-2017

12
推荐指数
2
解决办法
1万
查看次数

在VB6中使用SQLITE

我目前正在为可再发行的应用程序使用MSAccess mdb文件.

前段时间我发现了SQLite,作为我的解决方案的替代品,但是他们提供的二进制文件并没有提供将它们用作VB6中的对象的可能性.(或者至少我无法弄清楚如何).

有没有人有链接,或者可以写一些关于从VB6连接到SQLite DB,以及它与使用ADO的区别?

database sqlite vb6 ado

11
推荐指数
3
解决办法
3万
查看次数

Delphi 7:ADO,需要基本的编码示例

我是一个完全的初学者.有人可以发一些Delphi代码

  • 创建一个数据库
  • 添加一个简单的表
  • 关闭数据库

然后,以后

  • 打开一个数据库
  • 阅读每张桌子
  • 读取给定表的每个字段
  • 执行简单的搜索

对不起,这么无能为力.我做谷歌,但没有找到有用的教程......

另外,如果底层数据库是MySql(5.1.36)(我甚至不知道这是否有任何区别)会很有用

delphi ado

11
推荐指数
1
解决办法
5万
查看次数

COM msado15.dll程序已停止运行

我们一直在我们的程序中使用旧的msado15.dll.我们曾经导入它#import"msado15.dll".现在几天前我们升级到Windows 8.唉,我们的软件停止在没有安装Service Pack 1的Windows 7上运行.早些时候,当我们使用Windows 7时,我们已升级到Service Pack 1,同样的问题发生了,所以我们从所有机器上卸载了Windows 7的Service Pack 1,一切正常.

但是对于Windows 8,我认为他们已经改变了msado15.dll.我在网上进行了一些研究,他们说我们应该用msado60.tlb替换导入,但这对我们的编译破坏也没有用.

这就是我们过去在C++环境中引用的方式

import "c:\program Files\Common Files\system\ado\msado15.dll" rename_namespace("ADOCG") rename("EOF","EndofFile") 
Run Code Online (Sandbox Code Playgroud)

我把它改成了

import "c:\program Files\Common Files\system\ado\msado28.tlb" rename_namespace("ADOCG") rename("EOF","EndofFile")
Run Code Online (Sandbox Code Playgroud)

并尝试过

import "c:\program Files\Common Files\system\ado\msado60.tlb" rename_namespace("ADOCG") rename("EOF","EndofFile")
Run Code Online (Sandbox Code Playgroud)

正如Microsoft Link所建议的那样.但它仍然适用于没有安装Service Pack 1的XP机器和Windows 7机器.

任何人都可以建议我们可以遵循的正确步骤,以使我们的程序在没有Service Pack 1的Windows 7上运行,也可以在Windows 8上运行.

几天来一直坚持这个问题.帮助将不胜感激.

问候,Saurabh

c++ com ado windows-7 windows-8

11
推荐指数
1
解决办法
3881
查看次数