标签: ado

有没有办法使用普通ADO从SQL Server检索视图定义?

我使用ADO Connection OpenSchema()调用以各种方式成功从SQL服务器上托管的数据库中提取列定义,因此我可以在另一个SQL数据库中以编程方式重新创建这些表.到现在为止还挺好.

使用多个视图进行与上表的主要交互; 虽然OpenSchema()能够以与返回表的列定义相同的方式返回视图的列定义,但缺少一小部分信息 - 视图中的列映射到的基础表中的哪个表和列.

我尝试使用ADOX目录视图访问用于创建视图的SQL命令,但似乎我们使用的SQL Server的OLEDB驱动程序不支持此功能.

有没有办法通过ADO获取视图配置的这些信息,或者以"ColumnX映射到表Z中的ColumnY"的方式或以用于创建视图的实际SQL命令的形式?

sql-server ado view

80
推荐指数
4
解决办法
17万
查看次数

如何部署SQL Server Compact Edition 4.0?

我如何部署Microsoft SQL Server Compact 4.0


SQL Server Compact Edition(目前版本为4.0)是:

免费的嵌入式数据库,软件开发人员可以使用它来构建Windows桌面应用程序.它占用空间小,支持在应用程序文件夹中私有部署其二进制文件.

但是你如何实际部署呢?

问题是除非已注册,否则无法使用ADO OLEdb提供程序.注册OLEdb提供程序必须以管理员身份完成.这意味着SQL Server Compact版本将失败,而非管理员用户.

SQL Server Compact 4.0附带一个redist_enu.txt文件:

列出的.exe文件每个都将其附带的组件安装到目标计算机上的特定位置.这有助于确保可维护性和技术支持.这些.exe文件中包含的.dll文件也可以在此redist.txt中单独使用.但是,这些单独的.dll的分发可能会导致可维护性问题.有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=94589

通过BreadCrumb进行私有部署检测:不支持通过Assembly.LoadFrom(),.local文件或使用DLL/COM重定向策略显式加载本机堆栈和显式加载SQL Server Compact Assembly,可能导致可维护性问题.有关详细信息,请参阅http://support.microsoft.com/kb/835322http://msdn2.microsoft.com/en-us/library/aa375142.aspx

Microsoft SQL Server Compact 4.0

SSCERuntime_x86-ENU.exe
SSCERuntime_x86-DEU.exe
SSCERuntime_x86-FRA.exe
SSCERuntime_x86-
JPN.exe SSCERuntime_x86-RUS.exe
SSCERuntime_x86-ESN.exe
SSCERuntime_x86-ITA.exe
SSCERuntime_x86-KOR.exe
SSCERuntime_x86-CHT.exe
SSCERuntime_x86-CHS.exe
SSCERuntime_x64-ENU.exe
SSCERuntime_x64-DEU.exe
SSCERuntime_x64-FRA.exe
SSCERuntime_x64-
JPN.exe SSCERuntime_x64-RUS.exe
SSCERuntime_x64-ESN.exe
SSCERuntime_x64-ITA.exe
SSCERuntime_x64-KOR.exe
SSCERuntime_x64-CHT.exe
SSCERuntime_x64-CHS.exe
sqlcese40.dll
sqlceqp40.dll …

deployment ado xcopy sql-server-2008 sql-server-ce

45
推荐指数
2
解决办法
4万
查看次数

在某些情况下,ADO组件(尤其是TADOCommand)是否可以更加可靠地使用未命名或命名的参数?

StackOverflow上有几个问题似乎有关于ADO/OleDB,delphi TADOQuery/TADOCommand和参数主题的相互矛盾的答案.

可以在ADO组件的CommandText或SQL属性中以两种方式引入参数.大多数时候都为我工作的命名参数是用冒号引入的:

  select a, b, c from bar where bat = :baz
Run Code Online (Sandbox Code Playgroud)

这对99%的时间对我有用,就好了.偶尔我会发现ADO或Delphi的包装器不会接受":baz"并要求我写这个:

  select f, g, h from bar where bat = ?
Run Code Online (Sandbox Code Playgroud)

这会生成一个未命名的参数,而不是命名参数.当ADO查询或ADO命令只包含一个参数时,这不是什么大问题.但是当ADO对我不利时,情况并非如此.昨天它采取了一种方式,今天,在单个TADOCommand对象中使用双命令的另一种方式,就像这样,在一个CommandText字符串中有两个命令:

delete from bar where id = :id1
delete from bat where id = :id2
Run Code Online (Sandbox Code Playgroud)

我不得不改变它:

delete from bar where id = ?
delete from bat where id = ?
Run Code Online (Sandbox Code Playgroud)

它整天都在工作.今天,我不得不将其改回第一版,以使其发挥作用.症状是ADO参数消失了,不会再回来,当我尝试执行命令时,我得到一个错误,索引超出范围,当我尝试访问时Parameters[0].什么都没有给我任何关于参数消失的警告.似乎在ADO数据集的一些连接,在设计时TADOCommand,尤其是对组件进行慢跑,它"只是打破了我".当你尝试编写查询或命令时,它特别令人抓狂,你知道它有效,但是ADO组件决定不接受"?" 或":x"现在.你可以通过从一个切换到另一个来解决它无法运行的问题.但它让我感到沮丧,可能实际上完全阻止了其他人.我知道有些人总是在代码中动态构建SQL,并且避免使用Parameters,也许这就是原因.

我期待的问题的可能答案是:

  1. ADO不支持多个命令,或者至少Delphi的包装器不支持.或者也许TADOCommand只是在这里不可靠.

  2. 参数是所有ADO中的错误区域,还是所有Delphi的ADO包装器?

  3. 你这样做是错的.

我正在使用Delphi XE2,但我在2007,2009,2010和XE中看到过类似的狡猾行为.我正在使用Microsoft OLEDB Provider for SQL Server作为我的OLEDB Provider.

delphi ado

24
推荐指数
1
解决办法
1956
查看次数

VBA,ADO.Connection和查询参数

我有excel VBA脚本:

Set c?nn = CreateObject("ADODB.Connection")
conn.Open "report"
Set rs = conn.Execute("select * from table" ) 
Run Code Online (Sandbox Code Playgroud)

脚本工作正常,但我想添加参数.例如"where(parentid = myparam)",其中myparam在查询字符串外设置.我该怎么做?

当然我可以修改查询字符串,但我认为这不是很明智.

vba ado

22
推荐指数
2
解决办法
7万
查看次数

ADO和DAO之间的区别

这不是一个关于哪个更好的问题,而是一个关于它们在功能上有何不同的问题.我遇到的问题已经解决了,但我很好奇为什么会发生这种情况.

背景 - 使用Excel vba从Access数据库中提取数据.当用户单击按钮时,会从Access中提取记录集,并将各种数据填充到电子表格中.然后,从另一个查询中提取另一个记录集以填充电子表格的另一部分.

ADO做了什么 - ADO非常适合我的第一个记录集.但是,我的第二个记录集转到Access中的查询,运行,并且不返回任何行.如果我在Access中运行此查询,它会打开(大约3到4秒后).此查询具有多个连接,计算项,限制以及可能的Union查询(我尝试了许多不同的方式,有/无联合等).我尝试关闭并重新打开ado连接.我尝试更改超时值,我甚至测试使用ADO命令运行对此数据的Make表查询,然后从表中取出(这样做顺便说一句,但不是最好的情况,因为数据不断变化,每次有人使用此工具时,我都不想运行make table查询.

所以,我把第二个数据拉到了DAO,看,它有效.第一个数据拉取仍然是ADO(我通常更喜欢使用),但现在考虑将其更改为DAO,因为我宁愿在代码中使用一种数据访问方法.

那么,有人可以向我解释为什么ADO不会在一个案例中提取数据,但DAO会吗?同样,这纯粹是出于提供信息的目的.

excel ms-access vba dao ado

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

我可以查看是否已调用CoInitialize?

在具有ADO数据库连接的多线程环境中,我想知道是否已调用CoInitialize.我该如何检查?

delphi activex ado delphi-xe2

17
推荐指数
1
解决办法
3280
查看次数

将MS Access表单和类/模块递归导出到文本文件?

我在古老的留言板上找到了一些代码,可以很好地从类,模块和表单中导出所有VBA代码(见下文):

Option Explicit
Option Compare Database
Function SaveToFile()                  'Save the code for all modules to files in currentDatabaseDir\Code

Dim Name As String
Dim WasOpen As Boolean
Dim Last As Integer
Dim I As Integer
Dim TopDir As String, Path As String, FileName As String
Dim F As Long                          'File for saving code
Dim LineCount As Long                  'Line count of current module

I = InStrRev(CurrentDb.Name, "\")
TopDir = VBA.Left(CurrentDb.Name, I - 1)
Path = TopDir & "\" & "Code"           'Path where …
Run Code Online (Sandbox Code Playgroud)

ms-access vba dao ado jet

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

如何检查系统上是否安装了OLEDB驱动程序?

在启动应用程序时,如何确保安装某个OLEDB驱动程序?我使用Delphi的ADO,如果缺少驱动程序,则希望显示描述性错误消息.从ADO返回的错误并不总是那么用户友好.

可能有一个很好的小函数返回所有已安装的驱动程序,但我还没有找到它.

delphi oledb ado

14
推荐指数
2
解决办法
4万
查看次数

Access-SQL:内部连接多个表

我在数据库中有多个表:

tblOjt

ID    studentid    courseid    companyid    addresseeid    dateadded    datestarted    dateended    ojthours

1         3            1           1             1         9/25/2013                                  500 
Run Code Online (Sandbox Code Playgroud)

tblStudent

ID    lastname    firstname    middlename    course    gender    renderedhours    dateadded    archive

3     Dela Cruz      Juan        Santos       BSIT      Male          500
Run Code Online (Sandbox Code Playgroud)

tblCourse

ID    coursealias    coursename                                            hours
1         BSIT      Bachelor of Science in Information Technology          500
Run Code Online (Sandbox Code Playgroud)

tblCompany

ID    companyname

1      MyCompany
Run Code Online (Sandbox Code Playgroud)

tblAddressee

ID    addresseename

1     John dela Cruz
Run Code Online (Sandbox Code Playgroud)

我需要一个SQL语句,我可以在其中获取此值:

tableOjt.id  tableOJT.surname,firstname, and middlename  course  companyname  addresseename dateadded datestarted dateended ojthours
Run Code Online (Sandbox Code Playgroud)

我将如何使用这些连接方法在SQL中获取此代码...我在VB6 ADODC中编写它,这是否与标准SQL中的语法相同?谢谢

sql vb6 ms-access ado

14
推荐指数
1
解决办法
7万
查看次数

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万
查看次数