VB中调用SQL的一些小问题

前端之家收集整理的这篇文章主要介绍了VB中调用SQL的一些小问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

这一段时间,敲了两个系统,遇到了很多“小问题”,总结一下。

1.对象变量或With块变量未设置

这是我们经常遇到的问题,产生此类问题的原因很多,我们这段时间是用VB和数据库交互的,所以现阶段引起此类问题的主要原因是:数据库未连接!解决此问题的方法是查看数据库连接字符串是否正确,进行测试。

2.BOF或EOF中有一个是真,或者当前记录已被删除,要求一个当前记录

用到数据库时经常出现这个问题,可能原因是查询的数据表里无记录,当用到MoveFirst或MoveLast等时就会产生此类错误,因为数据表为空时EOF和BOF同时为True。解决方法有很多种,比如加上判断:

     If mrc.RecordCount = 0 Then    '判断记录集是否存在记录
           MsgBox "没有记录!"
           Exit Sub
     End If
或者使用错误处理:

On ErrorResumeNext

     RSS.MoveFirst

     if Err=3021 then
         Response.write "无数据!"
     End If
3.多步OLE DB操作产生错误


产生此错误的原因可能是:数据类型或长度的输入与数据库设定的不符,导致输入的数据无法存入数据库中!解决方法是根据报错的代码显示数据库表,查看数据库表中的类型和长度,并在输入时设定上限制。为了防止这类问题的发生,在设计时,应该先设计好数据库中各字段存储的数据类型,根据类型和长度,在VB中限定相对应的类型和长度,防止此类错误的发生。

4.对象关闭时不允许操作

这个问题很简单,但是很容易犯这样的错误,产生原因:如果需要某些表中的记录,则需要对表进行操作,表示打开表失败。解决方法是测试所需要的表是否进行了打开的操作,进行测试!

5.查询关键字附近有语法错误

这个问题报错时会报 “对象变量或With块变量未设置” 需要调试查出真正出问题的地方,产生此问题的一般原因是数据库表的名称数据库的关键字相同,解决方法很简单,将数据库表名用[ ]括起来就行了!

下面这些词都是T-sql语句中的关键字,在你写sql语句,存储过程,触发器或字段命名等时要避免使用这些词!

@H_301_136@

PRIMARY

@H_301_136@

PRINT

@H_301_136@

PRIVILEGES

@H_301_136@

PROC

@H_301_136@

PROCEDURE

@H_301_136@

PROCESSEXIT

@H_301_136@

PUBLIC

@H_301_136@

RAISERROR

@H_301_136@

READ

@H_301_136@

READTEXT

@H_301_136@

RECONFIGURE

@H_301_136@

REFERENCES

@H_301_136@

REPEATABLE

@H_301_136@

REPLICATION

@H_301_136@

RESTORE

@H_301_136@

RESTRICT

@H_301_136@

RETURN

@H_301_136@

REVOKE

@H_301_136@

RIGHT

@H_301_136@

ROLLBACK

@H_301_136@

ROWCOUNT

@H_301_136@

ROWGUIDCOL

@H_301_136@

RULE

@H_301_136@

SAVE

@H_301_136@

SCHEMA

@H_301_136@

SELECT

@H_301_136@

SERIALIZABLE

@H_301_136@

SESSION_USER

@H_301_136@

SET

@H_301_136@

SETUSER

@H_301_136@

SHUTDOWN

@H_301_136@

SOME

@H_301_136@

STATISTICS

@H_301_136@

SUM

@H_301_136@

SYSTEM_USER

@H_301_136@

TABLE

@H_301_136@

TAPE

@H_301_136@

TEMP

@H_301_136@

TEMPORARY

@H_301_136@

TEXTSIZE

@H_301_136@

THEN

@H_301_136@

TO

@H_301_136@

TOP

@H_301_136@

TRAN

@H_301_136@

TRANSACTION

@H_301_136@

TRIGGER

@H_301_136@

TRUNCATE

@H_301_136@

TSEQUAL

@H_301_136@

UNCOMMITTED

@H_301_136@

UNION

@H_301_136@

UNIQUE

@H_301_136@

UPDATE

@H_301_136@

UPDATETEXT

@H_301_136@

USE

@H_301_136@

USER

@H_301_136@

VALUES

@H_301_136@

VARYING

@H_301_136@

VIEW

@H_301_136@

WAITFOR

@H_301_136@

WHEN

@H_301_136@

WHERE

@H_301_136@

WHILE

@H_301_136@

WITH

@H_301_136@

WORK

@H_301_136@

WRITETEXT

@H_301_136@

@H_301_136@

ADD

EXIT

ALL

FETCH

ALTER

FILE

AND

FILLFACTOR

ANY

FLOPPY

AS

FOR

ASC

FOREIGN

AUTHORIZATION

FREETEXT

AVG

FREETEXTTABLE

BACKUP

FROM

BEGIN

FULL

BETWEEN

GOTO

BREAK

GRANT

BROWSE

GROUP

BULK

HAVING

BY

HOLDLOCK

CASCADE

IDENTITY

CASE

IDENTITY_INSERT

CHECK

IDENTITYCOL

CHECKPOINT

IF

CLOSE

IN

CLUSTERED

INDEX

COALESCE

INNER

COLUMN

INSERT

COMMIT

INTERSECT

COMMITTED

INTO

COMPUTE

IS

CONFIRM

ISOLATION

CONSTRAINT

JOIN

CONTAINS

KEY

CONTAINSTABLE

KILL

CONTINUE

LEFT

CONTROLROW

LEVEL

CONVERT

LIKE

COUNT

LINENO

CREATE

LOAD

CROSS

MAX

CURRENT

MIN

CURRENT_DATE

MIRROREXIT

CURRENT_TIME

NATIONAL

CURRENT_TIMESTAMP

NOCHECK

CURRENT_USER

NONCLUSTERED

CURSOR

NOT

DATABASE

NULL

DBCC

NULLIF

DEALLOCATE

OF

DECLARE

OFF

DEFAULT

OFFSETS

DELETE

ON

DENY

ONCE

DESC

ONLY

DISK

OPEN

DISTINCT

OPENDATASOURCE

DISTRIBUTED

OPENQUERY

DOUBLE

OPENROWSET

DROP

OPTION

DUMMY

OR

DUMP

ORDER

ELSE

OUTER

END

OVER

ERRLVL

PERCENT

ERROREXIT

PERM

ESCAPE

PERMANENT

EXCEPT

PIPE

EXEC

PLAN

EXECUTE

PRECISION

EXISTS

PREPARE

我们经常不会在意一些关键字 尤其是像 user work 等等,我们可以在使用数据库表名时都加上[ ]防止此类错误的发生。



总结仍在进行中,敬请期待~~~

猜你在找的VB相关文章