使用嵌入式数据库的最佳方法是什么,比如Python中的sqlite:
用法不是网络应用程序.它是一个小型数据库,最多可容纳5个表.每个表中的数据只是几个字符串列.想想比腌制词典更大的东西
更新:非常感谢您提出的好建议.
我正在谈论的用例非常简单.你可能会在一两天内做一件事.
这是一个100行的Python脚本,它收集有关相对大量文件(比如10k)的数据,并创建关于它们的元数据文件,然后创建一个关于整个文件树的大型元数据文件.我只需要避免重新处理已经处理的文件,并为更新的文件创建元数据,并更新主元数据文件.在某种程度上,缓存已处理的数据,并仅在文件更新时更新它.如果缓存已损坏/不可用,则只需处理整个树.可能需要20分钟,但没关系.
请注意,所有处理都在内存中完成.
我想避免任何外部依赖,以便脚本可以很容易地放在任何系统上,只需要安装Python.作为Windows,有时很难安装所有组件.因此,在我看来,即使是数据库也可能是一种过度杀伤力.
您可能不会启动Office Word/Writer来编写一个小型的帖子类型注释,同样我不愿意使用像Django这样的用例.
从哪儿开始?
我正在尝试使用Excel 2003并将其连接到SQL Server 2000以运行一些动态生成的SQL查询,这些查询最终会填充某些单元格.
我试图通过ADO通过VBA执行此操作(我已经尝试过2.8到2.0)但是在设置对象ActiveConnection内部的变量时出现错误ADODB.Connection.我需要快速解决这个问题......
请求的操作需要OLE DB会话对象,当前提供程序不支持该对象.
老实说,我不确定这个错误意味着什么,现在我不在乎.如何才能使此连接成功,以便我可以运行查询?
这是我的VB代码:
Dim SQL As String, RetValue As String
SQL = " select top 1 DateTimeValue from SrcTable where x='value' " 'Not the real SQL
RetValue = ""
Dim RS As ADODB.Recordset
Dim Con As New ADODB.Connection
Dim Cmd As New ADODB.Command
Con.ConnectionString = "Provider=sqloledb;DRIVER=SQL Server;Data Source=Server\Instance;Initial Catalog=MyDB_DC;User Id=<UserName>;Password=<Password>;"
Con.CommandTimeout = (60 * 30)
Set Cmd.ActiveConnection = Con ''Error occurs here.
' I'm not sure if the rest …Run Code Online (Sandbox Code Playgroud) 简短的问题:我发现我需要使用MARS而不是ADO/OLEDB,这是正确的吗?
更长的解释:
我刚刚发现我的ODBC代码(使用"Driver = {SQL Native Client}",MFC CDatabase代码)需要有MARS("MARS_Connection = yes;"),因为虽然我在打开RecordSet时没有发出多个SELECT,但我做了获取一批行,然后需要打开另一个RecordSet来发出一个新的SELECT,然后返回到下一批的第一个RecordSet.没有MARS我得到ODBC错误"连接忙于另一个命令的结果".一切都很公平.
但是,我的代码与ADO/OLEDB("Provider = SQLNCLI",#import msado15.dll)相同,而不是ODBC.在同样的情况下,我没有必须指定"MarsConn = yes".
我感到困惑/惊讶.这是正确/预期的,还是我错过了什么?
我正在尝试修复ASP Classic应用程序,当我尝试从Recordset对象创建一个数组时.但是,我不能让它正常工作.
这段代码给了我一条记录(最后一条),但据我所知,它是正确的:
Dim Products
Dim Products_cmd
Dim Products_numRows
Set Products_cmd = Server.CreateObject ("ADODB.Command")
Products_cmd.ActiveConnection = Conn
Products_cmd.CommandText = "SELECT prod_id, prod_description FROM dbo.products ORDER BY prod_description ASC"
Products_cmd.Prepared = true
Set Products = Products_cmd.Execute
Products_numRows = 0
Dim arrProducts()
arrProducts = Products.GetRows()
Run Code Online (Sandbox Code Playgroud)
使用此代码给我一个"下标超出范围:'UBound'
Dim Products
Dim Products_cmd
Dim Products_numRows
Set Products_cmd = Server.CreateObject ("ADODB.Command")
Products_cmd.ActiveConnection = Conn
Products_cmd.CommandText = "SELECT prod_id, prod_description FROM dbo.products ORDER BY prod_description ASC"
Products_cmd.Prepared = true
Set Products = Products_cmd.Execute
Products_numRows = 0
Dim …Run Code Online (Sandbox Code Playgroud) 这是我的连接字符串:
Global Const strConn As String = _
"PROVIDER=SQLNCLI10;" & _
"P-SSWORD=blahblah;" & _
"USER ID=blahblah;" & _
"INITIAL CATALOG=blah;" & _
"DATA SOURCE=blah;" & _
"CONNECT TIMEOUT=0;" & _
"COMMAND TIMEMOUT=0" & _
"PACKET SIZE=4096;"
Run Code Online (Sandbox Code Playgroud)
这是简单的代码:
Sub MoveDataUsingADO()
Dim cn As Object
Dim cm As Object
Dim rs As Object
'get in touch with the server
'Create ado objects.
Set cn = CreateObject("ADODB.Connection")
cn.connectiontimeout = 0
cn.Open strConn
cn.CommandTimeout = 0
Set cm = CreateObject("ADODB.Command")
Set cm.ActiveConnection = cn …Run Code Online (Sandbox Code Playgroud) 哪个更好(以及为什么原因)用于从Delphi Win32应用程序--ADO或DBX(数据库快速)连接到MS SQL,Oracle或Firebird?
两者都允许您连接到主要数据库.我喜欢ADO通过连接字符串更改完成所有操作的方式以及ADO和驱动程序包含在Windows中这样的事实,因此无需额外部署(看起来,如果我错了,请纠正我).
DBX也很灵活,我可以将驱动程序编译到我的应用程序中,不是吗?
如果可能的话,我真的很想拥有一个单一来源,能够根据客户的IT部门/偏好来改变数据库.
但哪个更容易编程,性能更好,最有效地使用内存?还有其他什么可以区分它们吗?
谢谢,理查德
我经常在SSIS包中遇到一种情况,我在其中运行SQL命令以从ADO连接返回一组行.有些情况下我想根据返回的行数进行分支.ado结果集存储在SSIS"对象"数据类型中.SSIS表达式或脚本组件中是否有一种方法可以获得行数?
我被告知SQL Native Client 应该比OLEDB驱动程序更快.所以我把一个实用工具放在一起进行两者之间的负载测试 - 结果好坏参半.有时一个更快,有时另一个更快,无论查询是什么(简单选择,where子句,join,order by等).当然,服务器承担了大部分工作量,但我对进入PC的数据到应用程序中可访问数据之间的时间感兴趣.
负载测试由非常小的查询组成,这些查询返回非常大的数据集.例如,我这样做select * from SysTables,这个表有50,000多条记录.在收到数据之后,我再次循环执行结果(使用while而不是Q.eof ... Q.next ...等).我也试过在查询中添加一些东西 - 比如order by Val哪里Val是一个varchar(100)字段.
这是我的负载测试仪的样本,最底部的数字是平均值...

那么真的,两者之间有什么区别?我知道OLE非常灵活,支持许多不同的数据库引擎,而Native Client仅针对SQL Server.但是幕后还有什么呢?这又如何影响Delphi如何使用这些驱动程序?
这通过TADOConnection组件特别使用ADO TADOQuery.
我不一定在寻找或想办法提高性能 - 我只需要知道驱动程序之间的区别.
我正在使用Delphi 7和Access 2007.
我想知道任何人都可以告诉我如何使用SQL语句和ADO参数.
什么是必要的编码等等.对不起,我是Delphi的新手.
我很难接受一些非常直截了当的事情.我有一个SQL Server数据库,我正在尝试使用空字符串更新不可为空的varchar或nvarchar字段.我知道这是可能的,因为空字符串''是不一样的东西NULL.但是,使用它TADOQuery,它不允许我这样做.
我正在尝试更新现有记录,如下所示:
ADOQuery1.Edit;
ADOQuery1['NonNullFieldName']:= '';
//or
ADOQuery1.FieldByName('NonNullFieldName').AsString:= '';
ADOQuery1.Post; //<-- Exception raised while posting
Run Code Online (Sandbox Code Playgroud)
如果字符串中有任何内容,即使只是一个空格,它也会像预期的那样保存得很好.但是,如果它是一个空字符串,它会失败:
不可为空的列无法更新为Null.
但它不是空的.它是一个空字符串,应该可以正常工作.我发誓我过去曾多次通过空串.
为什么我会收到此错误,我应该怎么做才能解决它?
额外细节:
SQLOLEDB.1nvarchar(MAX) NOT NULL