VB程序员博客

VB程序开发

Archive for 04月, 2009

用VB连接SQL serer 2005(数据库连接没有任何问题用的是ADODC控件)下面请大家帮忙看看错在哪里?
Private Sub Command1_Click()
Dim username, password As String
Dim rememberuser, rememberpassword As Integer
If Form1.Text1.Text = "" Then
MsgBox ("请输入用户名"), vbCritical, "提示"
ElseIf Form1.Text1.Text <> "" Then
Adodc1.RecordSource = "select * from userdetail where user =  '" & Form1.Text1.Text & "'"
Adodc1.Refresh
passsword = Adodc1.Recordset.Fields("password")
If password = Form1.Text2.Text Then
Form2.Show
End If

End If
End Sub
数据库中的表有2项分别是 user 和password 都是char(10)类型的
运行总是说关键字‘select’附近语法错误

首先说下:
Dim username, password As String
Dim rememberuser, rememberpassword As Integer
只定义了最后的password是string类型,和remenberpassword是integer类型,前面的两个是无类型的,
楼主去看看MSDN就知道了

其次:
"select * from userdetail where user =  '" & Form1.Text1.Text & "'"

改成:
"select * from userdetail where user = '" & Form1.Text1.Text & "' and '" & Form1.Text2.Text & "'"
然后只要判断recordcount是否大于0就知道是否匹配了.

还有,你说user 和password 都是char(10),那就规定了你的用户名和密码也必须是10位, 这样做不是很常见(不是不可以)
建议你使用VCHAR或NVCHAR类型

恩,谢谢wallescai指出的不足之处,问下"select * from userdetail where user = '" & Form1.Text1.Text & "' and '" & Form1.Text2.Text & "'"
然后只要判断recordcount是否大于0就知道是否匹配了.  具体该如何写,谢谢

form1.text2.text 是输入密码的地方  form1.text.text是输入用户名的
数据库的表名 userdetail  两项是user 和 password

Adodc1.RecordSource = " select * from userdetail where [user] =  '" & Form1.Text1.Text & "'"
Adodc1.Refresh
passsword = Adodc1.Recordset.Fields("[password]")

为什么现在又说实时错误3021
BOF 或 EOF 中有一个是真,或者当前的记录已被删除,所需的操作要求一个当前记录
user            password
123      123     
admin    123     
这是数据

自己顶下

谁能帮忙看看吗


Private Declare Function RtlMoveMemory Lib "kernel32.dll" (Destination As Any, Source As Any, ByRef Length As Long)
Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long
Private Declare Function NetApiBufferFree Lib "NETAPI32.DLL" (Buffer As Any) As Long
Private Type USER_INFO_0
    usri0_name As Long
End Type
Dim lngWin32apiResultCode As Long
    Dim strServerName        As String
    Dim lngBufPtr As Long
    Dim lngMaxLen            As Long
    Dim lngEntriesRead        As Long
    Dim lngTotalEntries      As Long
    Dim lngResumeHandle      As Long
    Dim udtUserInfo0 As USER_INFO_0
    Dim lngEntry              As Long

Private Sub Command1_Click()
        strServerName = StrConv("", vbUnicode)
    Do
        lngWin32apiResultCode = NetUserEnum(strServerName, 0, 0, lngBufPtr, lngMaxLen, lngEntriesRead, lngTotalEntries, lngResumeHandle)
        If (lngWin32apiResultCode = NERR_Success) Or (lngWin32apiResultCode = ERROR_MORE_DATA) Then
            For lngEntry = 0 To lngEntriesRead - 1
                RtlMoveMemory udtUserInfo0, ByVal lngBufPtr + Len(udtUserInfo0) * lngEntry, Len(udtUserInfo0)
                cboUsers.AddItem PointerToString(udtUserInfo0.usri0_name)
            Next
        End If
        If lngBufPtr <> 0 Then
            NetApiBufferFree lngBufPtr
        End If
    Loop Until lngEntriesRead = lngTotalEntriesEnd Sub

如果这个函数用不了,那换一个也行,只要能enum到所有用户就行

外接程序->外接程序管理器->Component Serverices Add-In For VB5.0/6.0中选择“在启动中加载 ”和“加载卸载”项
试一下

楼上说的已经是加载的呀

程序运行好 RtlMoveMemory 这个程序段就错误

Private Declare Function NetUserEnum Lib "netapi32.dll" (ByVal ServerName As String, ByVal Level As Long, ByVal filter As Long, bufptr As Any, ByVal prefmaxlen As Long, entriesread As Long, totalentries As Long, resume_handle As Long) As Long
Private Declare Function RtlMoveMemory Lib "kernel32.dll" (Destination As Any, Source As Any, ByRef Length As Long)
Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long
Private Declare Function NetApiBufferFree Lib "netapi32.dll" (Buffer As Any) As Long
Private Type USER_INFO_0
    usri0_name As Long
End Type
Dim lngWin32apiResultCode As Long
    Dim strServerName        As String
    Dim lngBufPtr As Long
    Dim lngMaxLen            As Long
    Dim lngEntriesRead        As Long
    Dim lngTotalEntries      As Long
    Dim lngResumeHandle      As Long
    Dim udtUserInfo0 As USER_INFO_0
    Dim lngEntry              As Long

Private Sub Command1_Click()
        strServerName = StrConv("", vbUnicode)
    Do
        lngWin32apiResultCode = NetUserEnum(strServerName, 0, 0, lngBufPtr, lngMaxLen, lngEntriesRead, lngTotalEntries, lngResumeHandle)
        If (lngWin32apiResultCode = NERR_Success) Or (lngWin32apiResultCode = ERROR_MORE_DATA) Then
            For lngEntry = 0 To lngEntriesRead - 1
                RtlMoveMemory udtUserInfo0, ByVal lngBufPtr + Len(udtUserInfo0) * lngEntry, Len(udtUserInfo0)
                cboUsers.AddItem PointerToString(udtUserInfo0.usri0_name)
            Next
        End If
        If lngBufPtr <> 0 Then
            NetApiBufferFree lngBufPtr
        End If
      Loop Until lngEntriesRead = lngTotalEntries
End Sub

Function PointerToString(lngPointer As Long) As String
''把返回的ASCII代码转换成字符
  Dim bytBuffer(255) As Byte   
    lstrcpy bytBuffer(0), ByVal lngPointer
    PointerToString = Left$(bytBuffer, lstrlen(lngPointer))
End Function

提示缺少PointerToString这个函数未定义

我在网上找了一个PointerToString函数 ,结果还不行


虽然之前与某人吵了架.

但是只喝了三瓶老珠江.

竟然头昏得很!

前几天三个人干一箱时也没一点感觉.

我觉得是这酒里配方不对了.

酒精度太高.

……难道,工业酒精?

乐天派老马也有烦心的时候?

严重慰问。

另,小声说:酒是粮食的精华,喝酒多会变得很fat……

稳住哥们,酒后会乱性的,呵呵

不如找个游戏,杀个天昏地暗,就消气了。

严重问候老马!酒能伤肝不易多饮.

老马自从喝了老珠江,头也昏了,人也晕了,睡觉也失眠了,如今的老珠江,实惠,一瓶顶过去五瓶。。。

心情不好,喝酒容易醉,而且伤身…

酒不醉人人自醉

曾经连喝16大瓶的人飘过, 目前是滴酒不沾的说

醉了很好..可以乱来

很好 很好

很好,很强大………

喝酒要适可而止,喝多了太伤身体

汗……..谢谢大家- -!

我现在醒了…….已经吃过午饭了…….

我想我现在完全清醒了吧……

赶紧来接分~~~~~~

恭喜老马清醒了!顺便问一下,老马你右手有几个大姆指?

至少有一个…..

引用 15 楼 myjian 的回复:
汗……..谢谢大家- -!

我现在醒了…….已经吃过午饭了…….

我想我现在完全清醒了吧……

酒精考验,醉过醉过……

先吃肥猪肉。

引用 20 楼 zeroieme 的回复:
先吃肥猪肉。

小心猪流感~!

小心身体啊

可怜的小猪

春天,就要过去了。

……..准备结帖,先洗澡.

进来抢分

能醒来就好,至少证明不是工业酒精,哈

高手排队来问候老马!
幸福!
羡慕!
学习!

主要是心情啊!

引用 29 楼 xxlroad 的回复:
主要是心情啊!

说得极是…….

就在前几天,见了一个四年多未见的朋友,三个人喝了一箱多都没事,还没一点感觉.

心情不爽时真的不能喝酒,极易醉!

结了…………

另外,我打个广告:

http://shop57980873.taobao.com/

欢迎大家光临伊儿的网店…….拍了一下午的照片,现在整完了哈哈.

这是我一朋友的店,HOHO.

今天来晚了点~~~~~~

引用 31 楼 myjian 的回复:
拍了一下午的照片

楼主太幸福了,话说照片里的MM蛮靓的
建议先倒卖一些游戏点卡,把信誉度先刷上来吧

主要是使用手机拍的,才200W象素,照片效果与实际相差太多了……..嘿嘿.

51我去买个DC去,到时再给她们拍.


DB.Execute "insert into liecyxxx values('" & Combo1.Text & _
            "','" & Text1.Text & _
            "','" & Text2.Text & _
            "','" & Combo2.Text & _
            "','" & Text3.Text & _
            "','" & CDate(Text4.Text) & _
            "','" & Combo3.Text & _
            "','" & CDate(Text5.Text) & _
            "','" & Combo4.Text & _
            "','" & Text6.Text & _
            "','" & Text7.Text & _
            "'," & Text8.Text & _
            "," & Text9.Text & _
            ",'" & Text10.Text & _
            "'," & Text11.Text & _
            "," & Text12.Text & _
            ",'" & Text13.Text & "')"

这里,我把 combo1,text1,text2,combo2,text4(日期型数据),text5(日期型数据)设为必填字段,其余的允许为空.tex8,text9,,text11,text12为数字型,其余的都是字符型数据.我在输入数据的时候,必填的字段都 赋予了值,那些允许为空的字段就没有输入任何值.运行的时候,系统提示"insert into 语句语法错误".请帮忙解决!!!!

检查一下表结构,最好写insert的时候,加上字段名。这样不容易出错而且容易找问题。

恩 还真是 谢谢了

不过为什么要这样啊?

dim sql as string
sql="insert into liecyxxx values('" & Combo1.Text & _
            "','" & Text1.Text & _
            "','" & Text2.Text & _
            "','" & Combo2.Text & _
            "','" & Text3.Text & _
            "','" & CDate(Text4.Text) & _
            "','" & Combo3.Text & _
            "','" & CDate(Text5.Text) & _
            "','" & Combo4.Text & _
            "','" & Text6.Text & _
            "','" & Text7.Text & _
            "'," & Text8.Text & _
            "," & Text9.Text & _
            ",'" & Text10.Text & _
            "'," & Text11.Text & _
            "," & Text12.Text & _
            ",'" & Text13.Text & "')"

然后你debug看一下里面具体是什么,如果觉得没错的话现在两个date类型的拿出来看看是不是有错,如果date拿出来没有错误了就是date


如题,,如果能指定位置的话当然最好(比如图片的左上角或右下角)

如果不要求 jpg 输出质量的话,有个简单的方法,大概过程

dim diskPicture as picture
set diskpicture = loadpicture(指定jpg文件)
接下来可以把这个图片加载到一个控件上,比如picturebox或者form,是能用print方法的控件
然后直接用 print + 文字定位的方法,将文字输出到指定位置
之后 设置 autoredraw = true 就可以savepicture了

如果要求图像输出质量高的话,可以用gdi+的系列函数直接操作这个jpg,
gdiloadimagefromfile…gdigetimagewidth,gdigetimageheight,drawtext,之后就是gdi的jpg输出api的调用
这些东西可以搜下baidu肯定有资料的

引用 2 楼 PctGL 的回复:

如果不要求 jpg 输出质量的话,有个简单的方法,大概过程

dim diskPicture as picture
set diskpicture = loadpicture(指定jpg文件)
接下来可以把这个图片加载到一个控件上,比如picturebox或者form,是能用print方法的控件
然后直接用 print + 文字定位的方法,将文字输出到指定位置
之后 设置 autoredraw = true 就可以savepicture了

如果要求图像输出质量高的话,可以用gdi+的系列函数直接操作这个jpg,
gdiload…

这个方法是可以,但如果我下面需要将这个新的jpg文件保存下来呢?
也就是原来没有文字的jpg保存成现在有文字的jpg?

再找个BMP转JPG组建

jpg先转成bmp再转成jpg?

jpg在picture上显示后再用Print方法向picture上添加文字,然后保存为bmp,然后转jpg

>之后 设置 autoredraw = true 就可以savepicture了

然后 savepicture picture1.image,文件保存路径
用loadpicture打开的jpg文件也会用jpg格式保存,打开的bmp文件则是用bmp保存的

谢谢楼上的几位哈:)

TO PctGL:SavePicture后是BMP格式,即使后缀名为JPG,仍然是BMP格式。
建议楼主使用GDI+,它支持把图像保存为JPG格式,以前我回答过这类问题,CSDN里有现成的源代码。

嘿嘿.

n….是啊,说错了

savepicture可以存的图形格式是位图、图标、元文件或增强元文件,
则图形将以原始文件同样的格式保存。如果它是 GIF 或 JPEG 文件,则将保存为位图文件。

楼主是想在网页上面显示图片,并在图片上面显示文字?
那用CSS就可以~~~~~~~~~~~


这条命令应该知道吧,就是映射磁盘的.在CMD命令符DOS下可以运行.

net use Z: \192.168.0.250E$ "admin11028" /user:"Admin"

但是我想在VB写,要怎么样写啊.像下面的代码就出错了,其它命令就行,这个命令多了几个双引号.

Private Sub Command1_Click()
shell "cmd /c net use Z: \192.168.0.250E$ "admin11028" /user:"Admin" "
End Sub

那就不要对用户名和密码的引号: shell "cmd /c net use Z: \192.168.0.250E$ admin11028 /user:Admin"

Private Sub Command1_Click()
shell "net use Z: \192.168.0.250E$ Password /user:Admin "
End Sub

shell """" & "cmd /c net use Z: \192.168.0.250E$" & """" & "admin11028" & """" & " /user:" & """" & "Admin" &"""" & """"


有哪位高手帮帮忙,由于刚学VB,不会熟练运用。我用鼠标事件实现了画图的功能,当我用鼠标画好一个图后,我想在点击一个按钮后怎样才能实现将整个图形向上偏移一段距离呢?我画的图形是由多条线段组成的,我只能实现最后一次画的线向上偏移,怎样才能使所有的图形都偏移呢?


用VB把Access数据库理的某一张表理的数据清空,但是这个表依然存在,只是数据清空,如何操作?

我用的是ADODC控件 直接在属性里设置的connectingstring,这样的话 怎么操作?

conn.execute "delete from tab1"

把问题说仔细点:
用VB命令,把数据库里的某一张表的数据清空,表仍然存在,清空后,我继续追加信息
我这样做的:
adodc1.recordsource="delete * from 表名"
adodc1.refresh

' 继续追加记录
adodc1.recordset.addnew
然后程序提示出现错误

怎么解决啊??

with adodc1
.movefirst
do while  .eof and .bof
.delete
.movenext
loop


我IP 库里有如下的一些记录
192.168.1.5
192.168.1.6
192.168.3.35
192.168.4.55
192.168.1
192.168.6

比如我获取的IP,192.168.1.17

select * from IP where IP =  '" & Text1.Text & "'or IP LIKE  '" & Text1.Text & "'

请问这个LIKE语句要怎么写的。。

引用 1 楼 zdingyun 的回复:
sql = "select * from IP where IP like '" & Text1.Text & "%'"

对象关闭时,不允许操作。。。。

引用 2 楼 tianwei76 的回复:
引用 1 楼 zdingyun 的回复:
sql = "select * from IP where IP like '" & Text1.Text & "%'"

对象关闭时,不允许操作。。。。

你没有先打开数据集啊
要先open啊

顶顶

引用 3 楼 zz005 的回复:
引用 2 楼 tianwei76 的回复:
引用 1 楼 zdingyun 的回复:
sql = "select * from IP where IP like '" & Text1.Text & "%'"

对象关闭时,不允许操作。。。。

你没有先打开数据集啊
要先open啊

打开了的,,
只是加了%以后,就会出现这个错误。。。。

select * from ip where ip like '"& text1.text &"%' 试试。

引用 6 楼 guimeili 的回复:
select * from ip where ip like '"& text1.text &"%' 试试。

select * from DON_IP where IP =  '" & Text1.Text & "' or ip like '" & Text1.Text & "%'
无错,但是没有效果了。。。。
我在库里加了,120.32.230
我的IP 120.32.230.224

ip like '" & Me.Text1 & "%'"

sql = "select * from IP where IP like '" & Text1.Text & "_%'"

sql = "select * from IP where IP like '%,%'"

select * from DON_IP where IP =  '" & Text1.Text & "' or ip like '" & Text1.Text & "%'
无错,但是没有效果了。。。。
我在库里加了,120.32.230
我的IP 120.32.230.224

"select * from DON_IP where ip like '%" & trim(Text1.Text) & "%'"


相同的打包,有的用户不出现这个错误
有的用户出现这个错误,
mdac也安装了,不知什么原因~.

可以用的用户是因为 我们的erp也用到cr
~~
可以用的用户多是装了erp的.

这个我没有遇到过。出现异常的用户机器与其他的机器环境有什么不同吗?

你自己的程序怎么打的包?
把水晶报表模块打进去了吗?

我在测试一下,

我把所有的东西多打包进去了,70mb了..

暂时把不能用的装上erp了,

阿泰
我把打包截图给你看看,
我明天在研究~~~