操作必须使用一个可更新的查询

知识
赵荷老师 2019-07-17 16:54:04
<%dimconnsetconn=server.createobject("adodb.connection")conn.connectionstring="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&server.mapPath("db/guest.mdb")conn.opensubclo...

<%
dim conn
set conn = server.createobject("adodb.connection")
conn.connectionstring="Provider = Microsoft.Jet.OLEDB.4.0;Data Source="&server.mapPath("db/guest.mdb")
conn.open

sub close_conn
conn.close
set conn = nothing
end sub
%>

<%

'…………

'以上省略与此无关的代码

sql="insert into G_user (G_UserName) values ('"&username&"')"
conn.execute(sql) '这是第93行
call close_conn
response.redirect"index.asp"
response.write "<script>alert('恭喜你,注册成功!');location.href='index.asp';</script>"

%>

运行后,显示

错误类型:
Microsoft JET Database Engine (0x80004005)
操作必须使用一个可更新的查询。
/guest/reg_do.asp, 第 93 行

别人电脑上可以运行起来,所以应该是我电脑的问题,我在网上搜了一下,有人说

就是对这个数据库文件, 右键--》属性--》安全--》看看有没有IIS开头的用户,如果有点中这个用户 看看下面有没有相关的修改权限。
如果没有IIS开头的用户 就添加进去。

但是我右键----属性里没有“安全”这一选项。我用的是ACCESS 2003。请问该怎么办?
XP的,请问该怎么办?

这个错误一般只有在使用ACCESS数据库时才会出现。因为ACCESS在打开时会生成一个临时文件.ldb,这时文件夹如果没有写入权限时,则会发生错误。

解决方法如下:
①如果你的系统是Win2003,则要在你网站目录处右击“属性”->“安全”->添加->输入“Everyone”,并给其完全控制的权限才能正常使用。

②如果你的系统是WinXP,这个问题一般发生在磁盘格式为NTFS的情况下。点击“工具”->“文件夹选项”->“查看”,找到“使用简单文件共享(推荐)”这项,把前面的勾去掉。
在网站所在文件夹上单击右键,选择“属性”,这时就能找到“安全”的选项卡,添加一个用户Everyone,权限设为“完全控制”。

#操作必须使用一个可更新的查询#

返回顶部

影响力:4302

asp.net操作必须使用一个可更新的查询吗

这个解答帮助过2462人

在Access数据库文件上单击右键->属性->安全---单击添加,在文本框中输入"IIS_WPG",单击确定, 给IIS_WPG设置权限,选中"允许写入",确定OK!

如果是 ASP.NET用户,要将这个用户也设置“允许写入”权限

编辑时间 2019-12-25 12:31:26
影响力:7248

网站中打开ACCESS出现如下提示,请问如何处理ACCESS数据库

描述: “/”应用程序中的服务器错误。操作必须使用一个可更新的查询。说明:执行当前Web请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细... “/”应用程序中的服务器错误。

操作必须使用一个可更新的查询。

说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.OleDb.OleDbException: 操作必须使用一个可更新的查询。

源错误:

执行当前 Web 请求期间生成了未经处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

堆栈跟踪:

[OleDbException (0x80004005): 操作必须使用一个可更新的查询。]
System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) +1139860
System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) +247
System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) +208
System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) +58
System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) +162
System.Data.OleDb.OleDbCommand.ExecuteNonQuery() +107
kbdyxt.Page_Load(Object sender, EventArgs e) +552
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51
System.Web.UI.Control.OnLoad(EventArgs e) +95
System.Web.UI.Control.LoadRecursive() +59
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +678

版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.6.1649.1
ACCESS2007
展开
这个解答帮助过9645人

重点是这句话:操作必须使用一个可更新的查询 原因在这里, 说明没有更新权限, 数据库目录给个更新权限

编辑时间 2019-04-26
影响力:571

win7中microsoft jet 数据库引擎打不开文件

描述: 我是win7系统,就是连接access数据库出现的问题... 我是win7系统,就是连接access数据库出现的问题

这个解答帮助过1580人

方法1:
错误类型: Microsoft OLE DB Provider for ODBC Drivers
('0x80004005')
[Microsoft][ODBC Microsoft Access Driver] Microsoft Jet
数据库引擎打不开文件'(未知的)'。
它已经被别的用户以独占方式打开,或没有查看数据的权限。
/conn.asp, 第 6 行
解决方法:

1.在asp操作数据库时出现“操作必须使用一个可更新的查询”错误:

2.文件夹——〉属性;或,资源管理器——〉工具——〉文件夹选项

3.在“查看”选项卡中不钩选“使用简单文件共享”

4.这样,你在XP下NTFS分区文件夹右键,也能看到如WIN2000一样的“安全”选项卡了

5.在“安全”选项卡下,点击“添加……”,跳出“选择用户和组”对话框

6.然后点击“立即查找”,在下图所示的列表中选择“IUSR_”(下划线之后是你的计算机名)

7.之后在“安全”选项卡中就会出现“Internet来宾帐户”,将这个帐户的权限设置为“可修改”和“可写入”

最后按确定,问题得到解决,不会再出现“Microsoft OLE DB Provider for ODBC Drivers
(0x80004005)”错误 !

编辑时间
影响力:7976

excel表已写好表头,怎么将c#中的数据直接导

这个解答帮助过9990人

1.创建解决方案

菜单》新建》项目》Windows窗体应用程序:

2.添加相关组件:

添加两个DataGridView,一个TextBox,两个按钮 ,如下图:

3.添加Excel资源:

C#创建Excel文件,这里实际上是从资源中提取一个事先创建好的Excel文件,文件提取成功后,使用OleDb方法连接Excel,向Excel文件中写入数据。

先在文件夹中新建一个Excel文件,在Sheet1表的第一行设置列名:

4.双击“Resources.resx”文件打开资源文件视图:

5.添加现有文件,选择刚刚创建的Excel文件。

6.从资源中提取Excel文件。

7.定义连接字符串。

8.注意:连接字符串中IMEX的值使用的是10,如果是1或2,在执行Insert Into语句时就会报“操作必须使用一个可更新的查询”的错误。

在dataGridView1中显示Excel文件中的所有表的信息。

9.向"Sheet1"表中插入几条数据,访问Excel的表的时候需要在表名后添加"$"符号,Insert语句可以不指定列名。

10.在dataGridView2中显示表"Sheet1"的内容,访问Excel的表的时候需要在表名后添加"$"符号。

11.遍历Schema的内容。

12.关闭Excel数据连接。

13.打开文件目录。

14.最终效果。

编辑时间 2019-07-24
影响力:3389

access更新查询

描述: 更新数目时明明更新行数是1,但是已更新的时候显示跟新6行,为什么啊... 更新数目时明明更新行数是1,但是已更新的时候显示跟新6行,为什么啊

这个解答帮助过628人

系统提示是不会撒谎的,这次更新肯定是要更新6行记录,题主认为明明只更新1行应该为误判。
如果能提供更新语句和实际数据表记录,将有助于分析问题出在哪里。

编辑时间 2019-07-21
影响力:1246

access有几种查询的类型,其中操作查

这个解答帮助过5819人



access提供了5种类型的查询,包括选择查询、参数查询、交叉表查询、操作查询和SQL查询。

1.选择查询
选择查询是最常见的查询类型,它从一个或多个表中检索数据,在一定的限制条件下,还可以通过选择查询来更改相关表中的记录。使用选择查询也可以对记录进行分组,并且可对记录进行总计、计数以及求平均值等其他类型的计算。

2.交叉表查询
交叉表查询可以在一种紧凑的、类似于电子表格的格式中,显示来源于表中某个字段的合计值、计算值、平均值等。交叉表查询将这些数据分组,一组列在数据表的左侧,一组列在数据表的上部。
注意:可以使用数据透视表向导毒显示交叉表数据,无需在数据库中创建单独的查询。

3.参数查询
参数查询会在执行时弹出对话框,提示用户输入必要的信息(参数),然后按照这些信息进行查询。例如,可以设计一个参数查询,以对话框来提示用户输入两个日期,然后检索这两个日期之间的所有记录。
参数查询便于作为窗体和报表的基础。例如,以参数查询为基础创建月盈利报表。打印报表时,Access显示对话框询问所需报表的月份。用户输入月份后,Access便打印相应的报表。也可以创建自定义窗体或对话框,来代替使用参数查询对话框提示输人查
询的参数。

4.操作查询
操作查询是在一个操作中更改许多记录的查询,操作查询又可分为四种类型:删除查询、更新查询、追加查询和生成表查询。

5.SQL查询
SQL查询是使用SQL语句创建的查询。经常使用的SQL。查询包括联合查询、传递查询、数据定义查询和子查询等。

编辑时间 2019-01-19
影响力:3586

access2010中,通过生成表查询,可以将查询所得的数据保存在一个新的查询里?哪里错了???

这个解答帮助过7973人

保存到一个新的表里面,并不是查询里面

编辑时间 2019-02-02
影响力:8346

access中在更新查询中可以使用计算功能 是什么意思?计算字段可以更新?

这个解答帮助过122人

问题的描述有点模糊,更新查询使用计算功能我是这样用的:比如有两个数值字段 A 和 B,现在要将A和B相加更新到A字段,可以对A字段的 更新到 写为[A]+[B],这样就做成了一个有计算功能的更新查询。

编辑时间 2019-03-20
影响力:5483

mysql 触发器如何优化速度

这个解答帮助过375人

关于mysql处理百万级以上的数据时如何提高其查询速度的方法

最近一段时间由于工作需要,开始关注针对Mysql数据库的select查询语句的相关优化方法。

由于在参与的实际项目中发现当mysql表的数据量达到百万级时,普通SQL查询效率呈直线下降,而且如果where中的查询条件较多时,其查询速度简直无法容忍。曾经测试对一个包含400多万条记录(有索引)的表执行一条条件查询,其查询时间竟然高达40几秒,相信这么高的查询延时,任何用户都会抓狂。因此如何提高sql语句查询效率,显得十分重要。以下是网上流传比较广泛的30种SQL查询语句优化方法:
1、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

2、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

3、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0

4、尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num=10 or num=20
可以这样查询:
select id from t where num=10
union all
select id from t where num=20

5、下面的查询也将导致全表扫描:(不能前置百分号)
select id from t where name like ‘%c%’
若要提高效率,可以考虑全文检索。

6、in 和 not in 也要慎用,否则会导致全表扫描,如:
select id from t where num in(1,2,3)
对于连续的数值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3

7、如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然 而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:
select id from t where num=@num
可以改为强制查询使用索引:
select id from t with(index(索引名)) where num=@num

8、应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where num/2=100
应改为:
select id from t where num=100*2

9、应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where substring(name,1,3)=’abc’–name以abc开头的id
select id from t where datediff(day,createdate,’2005-11-30′)=0–’2005-11-30′生成的id
应改为:
select id from t where name like ‘abc%’
select id from t where createdate>=’2005-11-30′ and createdate<’2005-12-1′

10、不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

11、在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使 用,并且应尽可能的让字段顺序与索引顺序相一致。

12、不要写一些没有意义的查询,如需要生成一个空表结构:
select col1,col2 into #t from t where 1=0
这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样:
create table #t(…)

13、很多时候用 exists 代替 in 是一个好的选择:
select num from a where num in(select num from b)
用下面的语句替换:
select num from a where exists(select 1 from b where num=a.num)

14、并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段 sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。

15、索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有 必要。

16.应尽可能的避免更新 clustered 索引数据列,因为 clustered 索引数据列的顺序就是表记录的物理存储顺序,一旦该列值改变将导致整个表记录的顺序的调整,会耗费相当大的资源。若应用系统需要频繁更新 clustered 索引数据列,那么需要考虑是否应将该索引建为 clustered 索引。

17、尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会 逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

18、尽可能的使用 varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。

19、任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

20、尽量使用表变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引)。

21、避免频繁创建和删除临时表,以减少系统表资源的消耗。

22、临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使 用导出表。

23、在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。

24、如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。

25、尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。

26、使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效。

27、与临时表一样,游标并不是不可使用。对小型数据集使用 FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。在结果集中包括“合计”的例程通常要比使用游标执行的速度快。如果开发时 间允许,基于游标的方法和基于集的方法都可以尝试一下,看哪一种方法的效果更好。

28、在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息。

29、尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。

30、尽量避免大事务操作,提高系统并发能力。

编辑时间 2019-10-06
影响力:1215

数据库的面试会问什么样的问题?

这个解答帮助过5330人

目前在职场中很难找到非常合格的数据库开发人员。有人说:“sql开发是一门语言,它很容易学,但是很难掌握。”
在面试应聘的sql Server数据库开发人员时,我运用了一套标准的基准技术问题。下面这些问题是我觉得能够真正有助于淘汰不合格应聘者的问题。它们按照从易到难的顺序排列。当你问到关于主键和外键的问题时,后面的问题都十分有难度,因为答案可能会更难解释和说明,尤其是在面试的情形下。
你能向我简要叙述一下sql Server 2000中使用的一些数据库对象吗?
你希望听到的答案包括这样一些对象:表格、视图、用户定义的函数,以及存储过程;如果他们还能够提到像触发器这样的对象就更好了。如果应聘者不能回答这个基本的问题,那么这不是一个好兆头。
null是什么意思?
null(空)这个值是数据库世界里一个非常难缠的东西,所以有不少应聘者会在这个问题上跌跟头您也不要觉得意外。
null这个值表示unknown(未知):它不表示“”(空字符串)。假设您的sql Server数据库里有ANSI_nullS,当然在默认情况下会有,对null这个值的任何比较都会生产一个null值。您不能把任何值与一个 unknown值进行比较,并在逻辑上希望获得一个答案。您必须使用IS null操作符。
 
什么是索引?sql Server 2000里有什么类型的索引?
任何有经验的数据库开发人员都应该能够很轻易地回答这个问题。一些经验不太多的开发人员能够回答这个问题,但是有些地方会说不清楚。
简单地说,索引是一个数据结构,用来快速访问数据库表格或者视图里的数据。在sql Server里,它们有两种形式:聚集索引和非聚集索引。聚集索引在索引的叶级保存数据。这意味着不论聚集索引里有表格的哪个(或哪些)字段,这些字段都会按顺序被保存在表格。由于存在这种排序,所以每个表格只会有一个聚集索引。非聚集索引在索引的叶级有一个行标识符。这个行标识符是一个指向磁盘上数据的指针。它允许每个表格有多个非聚集索引。
什么是主键?什么是外键?
主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。那么这些相连的字段就是外键。
什么是触发器?sql Server 2000有什么不同类型的触发器?
让未来的数据库开发人员知道可用的触发器类型以及如何实现它们是非常有益的

触发器是一种专用类型的存储过程,它被捆绑到sql Server 2000的表格或者视图上。在sql Server 2000里,有INSTEAD-OF和after两种触发器。INSTEAD-OF触发器是替代数据操控语言(Data Manipulation Language,dml)语句对表格执行语句的存储过程。例如,如果我有一个用于TableA的INSTEAD-OF-UPDATE触发器,同时对这个表格执行一个更新语句,那么INSTEAD-OF-UPDATE触发器里的代码会执行,而不是我执行的更新语句则不会执行操作。
after触发器要在dml语句在数据库里使用之后才执行。这些类型的触发器对于监视发生在数据库表格里的数据变化十分好用。
您如何确一个带有名为Fld1字段的TableB表格里只具有Fld1字段里的那些值,而这些值同时在名为TableA的表格的Fld1字段里?
这个与关系相关的问题有两个可能的答案。第一个答案(而且是您希望听到的答案)是使用外键限制。外键限制用来维护引用的完整性。它被用来确保表格里的字段只保存有已经在不同的(或者相同的)表格里的另一个字段里定义了的值。这个字段就是候选键(通常是另外一个表格的主键)。
另外一种答案是触发器。触发器可以被用来保证以另外一种方式实现与限制相同的作用,但是它非常难设置与维护,而且性能一般都很糟糕。由于这个原因,微软建议开发人员使用外键限制而不是触发器来维护引用的完整性。
对一个投入使用的在线事务处理表格有过多索引需要有什么样的性能考虑?
你正在寻找进行与数据操控有关的应聘人员。对一个表格的索引越多,数据库引擎用来更新、插入或者删除数据所需要的时间就越多,因为在数据操控发生的时候索引也必须要维护。
你可以用什么来确保表格里的字段只接受特定范围里的值?
这个问题可以用多种方式来回答,但是只有一个答案是“好”答案。您希望听到的回答是Check限制,它在数据库表格里被定义,用来限制输入该列的值。
触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,这可能会在某些情况下影响到性能。因此,微软建议使用Check限制而不是其他的方式来限制域的完整性。
<b?返回参数和output参数之间的区别是什么?>如果应聘者能够正确地回答这个问题,那么他的机会就非常大了,因为这表明他们具有使用存储过程的经验。
返回参数总是由存储过程返回,它用来表示存储过程是成功还是失败。返回参数总是int数据类型。
OUTPUT参数明确要求由开发人员来指定,它可以返回其他类型的数据,例如字符型和数值型的值。(可以用作输出参数的数据类型是有一些限制的。)您可以在一个存储过程里使用多个OUTPUT参数,而您只能够使用一个返回参数。
什么是相关子查询?如何使用这些查询?
经验更加丰富的开发人员将能够准确地描述这种类型的查询。
相关子查询是一种包含子查询的特殊类型的查询。查询里包含的子查询会真正请求外部查询的值,从而形成一个类似于循环的状况。</b?返回参数和output参数之间的区别是什么?>

编辑时间 2018-12-27