我在传统的ASP Classic代码中使用ADO Recordset上的过滤器时遇到了问题,而我正在尝试了解我是否不支持我正在尝试做什么,或者我是否只是做错了.
我有一个Items记录集,它们的状态为1(活动)或0(非活动),以及可选的End_Date.在我的管理用户界面中,我有一个控件来显示所有项目或仅显示应该显示给最终用户的项目:Status = 1 AND ( End_Date is null OR End_Date > Date() )
为了实现这个逻辑,我试过:
rs.Filter = "Status = 1 AND ( End_Date = null OR End_Date > #" & Date() & "# )"
Run Code Online (Sandbox Code Playgroud)
但我明白了
ADODB.Recordset (0x800A0BB9)
Unknown runtime error
Run Code Online (Sandbox Code Playgroud)
经过多次愚弄,似乎ADO不喜欢End_Date条件下的分组parens与AND条件相结合.如果我把parens拿出来,这有效:
rs.Filter = "Status = 1 AND End_Date = null OR End_Date > #" & Date() & "#"
Run Code Online (Sandbox Code Playgroud)
但这只是一个意外 - 它看起来像是按顺序评估过滤条件,所以我得到了我想要的结果.如果我将AND更改为OR,则parens工作:
rs.Filter = "Status = 1 OR ( End_Date = null OR End_Date > #" & Date() …Run Code Online (Sandbox Code Playgroud) 我正在使用Delphi,但这是一个简单而普遍的问题:
我正在做以下事情:
var
ArticlesTable: TADOTable;
begin
ArticlesTable.DisableControls;
ArticlesTable.Sort := 'CITY';
ArticlesTable.First;
while not ArticlesTable.Eof do begin
...
ArticlesTable.Next;
end;
Run Code Online (Sandbox Code Playgroud)
这非常有效,并且允许我逐个有效地处理记录,并且当它们进入时,CITY字段按顺序递增记录.
但是,现在我想通过"LAST NAME"字段订购,其中包含一个嵌入式空间.但是当我使用声明时:
ArticlesTable.Sort := 'CITY';
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:
EOleException: Arguments are of the wrong type, are out of acceptable range,
or are in conflict with one another.
Run Code Online (Sandbox Code Playgroud)
我已经看到了SORT字符串语法的帮助.它表示用逗号分隔多个字段,并在字段之后添加ASC或DESC以对升序或降序进行排序.但它没有说明如果fieldname中有空格怎么办.
我已经尝试将字段名称放在单引号和双引号中,甚至使用#20作为空格字符,但这些不起作用.
我无法更改Microsoft Access数据库上的字段名称,因为还有其他程序我不能使用它依赖它.
我确信必须有一种简单的方法来做到这一点,我不知道.
我在尝试将 vb6 中的某些变量的内容输出到文本文件中时遇到问题。问题是,当扩展 ASCII 中的特殊字符显示为 \xc3\xa4、\xc3\xbc、\xc3\xa1 时,它会在输出中转换为匹配的基本 ASCII 字符,如 a、u、a。
\n\n我尝试像 UTF-8 一样导出它,然后正确显示字符,但我需要输出为 ASCII。另外,对我来说看起来很奇怪的是文件名通常可以包含此字符(\xc3\xa4、\xc3\xbc、\xc3\xa1...)而无需替换。
\n\n这是因为“ASCII”字符集只是基本字符集而不是扩展字符集吗?也许是因为 Windows 中配置的代码页?我尝试过其中的几个(德语、英语),结果相同。
\n\n这是我正在使用的代码:
\n\nSet fileStream = New ADODB.Stream\nIf Not fileStream Is Nothing Then\n inputString = textPreAppend + inputString\n fileStream.charSet = "ASCII"\n fileStream.Open\n fileStream.WriteText inputString\n fileStream.Flush\n fileStream.SaveToFile fileName, adSaveCreateOverWrite\n fileStream.Flush\n fileStream.Close\nEnd If\nSet fileStream = Nothing\nRun Code Online (Sandbox Code Playgroud)\n\n提前致谢!
\n我在经典的asp中调用存储过程
我正在添加我的参数:
set objParam =.CreateParameter("@Param",129,1,"3" ,Request.Form("Param"))
.Parameters.Append objParam
Run Code Online (Sandbox Code Playgroud)
在我这样的SQL中
@NomCentre varchar(3)
Run Code Online (Sandbox Code Playgroud)
但是当我的数据插入时,我总是有额外的空间来完成我的varchar的长度
示例:"i"变为"i"而"te"变为"te"
有人有一个想法谢谢
我正在使用500 MB大小的访问2000 mdb文件,当我Select * From MyTable Where Phone=7744111花费太长时间,超过30秒才能获得结果.
如何提高搜索性能?(我正在使用vb6和ado 2.8)
下面的代码是用 VBScript 编写的。但是该行Set rs = cmd.Execute抛出错误,指出NVL未定义。那么你能建议一个相当于“NVL”的东西吗?
Option Explicit
Dim conn, cmd, rs
Dim clauses(34), i
Dim xlApp, xlBook
Dim tempDate,LenDate
Set conn = CreateObject("ADODB.Connection")
With conn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "Data Source=""D:\AravoVB\GE_Wing_To_Wing_Report - Copy.xlsx"";" & _
"Extended Properties=""Excel 12.0;HDR=Yes"""
.Open
End With
tempDate="[Business Process ID],"
For i = 0 To 34
clauses(i) = "[Task" & i + 1 & " Start Date] > [Task" & i + 2 & " Start Date]"
tempDate=tempDate & "NVL([Task" …Run Code Online (Sandbox Code Playgroud) 我正在尝试连接到mdb(访问2000)我的应用程序有1个主屏幕,有4个按钮.每个按钮都会打开一个新表格.
我需要在所有4个子表单上访问这个数据库,我是否必须为每个表单添加一个ADOConnection?我可以在主窗体上建立连接吗?或者还有更好的方法吗?
我想从Delphi 2007运行一个简单的SQL.
我用AdoQuery.我的表有一列id,数据类型是int(自动增量).
我的问题是如果我执行
select * from comlist
Run Code Online (Sandbox Code Playgroud)
它没有问题,它运行.但是,如果我在SQL上定义一个字段就像
select compname from comlist
Run Code Online (Sandbox Code Playgroud)
德尔福抱怨道
ado:找不到字段'id'
该Compname列存在于表中.
我的桌子上有以下字段:
id int
creationdate datetime
compid nvarcahr(50)
complocation nvarchar(50)
serial nvarchar(50)
compname nvarchar(50)
Run Code Online (Sandbox Code Playgroud)
我有这个代码的错误:
ado.Close;
ado.SQL.Clear;
ado.SQL.Add('SELECT compname FROM comlist');
ado.Open;
Run Code Online (Sandbox Code Playgroud)
我对此代码没有错误:
ado.Close;
ado.SQL.Clear;
ado.SQL.Add('SELECT * FROM comlist');
ado.Open;
Run Code Online (Sandbox Code Playgroud)
可能是什么问题呢?
在我的结算表单中,我有一个按钮,可将datagridview数据插入两个访问数据库.我使用此代码插入第一个数据库:
Private Sub inserttotblbill()
Dim billcon As OleDbConnection = New OleDbConnection(constr)
Dim billcmd As New OleDbCommand
For i = 0 To dgv.Rows.Count - 1
billcon.Open()
billcmd.Connection = billcon
billcmd.CommandText = ("insert into tblbill(inum,snum,idate,cname,iname,iprc,iqnt,ipaid,itotal,iuser,itype) " _
& " values('" _
& TextBox1.Text _
& "','" _
& TextBox6.Text _
& "','" _
& TextBox2.Text _
& "','" _
& TextBox3.Text _
& "','" _
& dgv.Rows(i).Cells(0).Value _
& "','" _
& dgv.Rows(i).Cells(1).Value _
& "','" _
& dgv.Rows(i).Cells(2).Value _
& "','" …Run Code Online (Sandbox Code Playgroud) 我有一个包含四个字段的表,其中一个字段是主键。当我运行以下命令时:
var
iAffectedRows: integer;
begin
ADOCommand1.CommandText := 'insert into table_1(Field_1, Field_2, Field_3) values(:A_Field_1, :A_Field_2, :A_Field_3)';
ADOCommand1.Parameters.FindParam('A_Field_1').Value := '100';
ADOCommand1.Parameters.FindParam('A_Field_2').Value := '200';
ADOCommand1.Parameters.FindParam('A_Field_3').Value := '300';
ADOCommand1.Execute(iAffectedRows);
end;
Run Code Online (Sandbox Code Playgroud)
结果是:
所述Field_1值是0。
(这个结果是由于运行命令:ADOCommand1.Execute(iAffectedRows))
但是有了这个命令,一切都是正确的:ADOCommand1.Execute()
这个问题有解决方案吗?
我们有一个使用tadoconnection连接sql server数据库的delphi应用程序问题是当我们在运行exe文件时打开资源黑客时它清楚地显示了连接字符串,任何人都可以连接到我们的服务器
我通过以下代码找到了一些记录:
ADOQuery1.Locate('field1',ADOQuery2.FieldByName('field2').Value,[])
Run Code Online (Sandbox Code Playgroud)
如何进入最后一条记录?
我第一次将表中的数据填充到列表中然后我清除列表以从不同的表中选择不同的数据,所以我希望从内存中释放第一个列表,因为我将越来越多地获得新数据.
我试过了:
List.Dispose();
List.Clear();
List = null;
GC.Collect();
Run Code Online (Sandbox Code Playgroud)
但记忆力充沛.
在实体框架中我想出来并添加了.AsNoTracking()它并且它工作并且内存被清除
但我必须使用ADO.Net.