VB程序员博客
Archive for 03月, 2009
03 31st, 2009
一级菜鸟请教:
我知道的vb连接数据库的方法有两种:
1.通过设置数据源
2.写代码
我想通过写代码做。在公共模块写,怎么写?写完在需要的界面调用的代码?
很菜的问题,不要见笑啊,各位
希望越傻瓜越好
'连接SQL数据库为例
'公共模块的代码如下
Public adoCon As New ADODB.Connection '定义一个数据连接
Public CnnStr As String
Public Sub Main() '定义一个公共主函数,用于连接数据库
CnnStr = " Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;pwd=SA的密码;Initial Catalog=数据库名;Data Source=计算机名或IP地址 "
adoCon.Open (CnnStr)
End Sub
'其中User ID=sa是SQL安装后就有的,这个你不用改。而pwd=SA的密码SQL安装后是空的,如果你没有改过密码,这句就不用写了。
'计算机名或IP地址,就是你安装了SQL的计算机名或IP.如果是本机就写.(是一点哦)就可以。
'下面读取数据库中指定数据表的内容
'在窗口中添加一个DataGrid控件和一个Adodc控件
Private Sub Form_Load()
Main '调用Main涵数打开数据库
Adodc1.ConnectionString = CnnStr '连接数据库
Adodc1.RecordSource = "select * from 数据表名" '使用SQL语句查询数据表的内容
Set DataGrid1.DataSource = Adodc1 '设DateGrid与Adodc连接
End Sub
Public Function cnstr() As String
cnstr = "Provider=SQLOLEDB;Persist Security Info=False;User ID=sa;Initial Catalog=db_Csell"
End Function
Public Function Cnn() As ADODB.Connection '定义函数
Set Cnn = New ADODB.Connection
'返回一个数据库连接
Cnn.Open "Driver={SQL Server};Server=(local);Database=2;Uid=sa;Pwd="
End Function
请问这一段代码跟楼上的代码是一样的吗?
还有在adodc1中的connectionstring属性设置的是一样的吗?是什么意思呢?
dim conn as new adodb.connection
'连接ACCESS数据库,假设数据库在程序所在目录下test.mdb
with conn
If .State = adStateOpen Then .Close
.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & " est.mdb;Mode=ReadWrite;Persist Security Info=False"
.Open
End With
'连接MS SQL Server2000或2005
With conn
If .State = adStateOpen Then .Close
.ConnectionString = "driver=SQL Server;server=计算机名或IP地址;uid=SA;pwd=SA的密码;database=数据库名"
.CommandTimeout = 120
.Open
End With
03 31st, 2009
有个问题!我要双击一个datagridview的第一行的时候,会出现一个form,这个form上面也有个datagridview并且绑定了excel数据!然后,双击第2行,要那个form又出现,但是datagridview上显示的是不同的数据,一直双击第3行,第4行,第5行,都会出现那个form,但datagridview上显示不同的数据!我是用的这个方法,做了5个form(我是新手,方法很笨,呵呵),每次点datagridview上不同的行的时候,就会分别出现!但这个方法好麻烦。因为这5个form都是一样的!只是每次打开的路径(红字显示的)不同罢了~!我想要只做一个form可以出现5次而显示不同的数据基于不同的数据路径~!!诚恳谢谢大家了!!很急~
Dim str As String
Dim con As OleDb.OleDbConnection = New OleDb.OleDbConnection
Dim fName As String
fName = "c:SCOR2 ConfigurationLevel 2-Source.xls"
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & fName & ";Extended Properties=""Excel 8.0;HDR=YES;"""
con.Open()
str = "select [No] from [sheet1$] where predecessor like '%,%'"
5行分别打开5个form:
Private Sub DataGridView1_CellMouseDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDoubleClick
If e.RowIndex = 0 Then
MessageBox.Show("this row is column name ,it can not be edited ,please select the other row")
Else
If e.RowIndex = 1 Then
Form5.ShowDialog()
Form5.Close()
Else
If e.RowIndex = 2 Then
Form4.ShowDialog()
Form4.Close()
Else
If e.RowIndex = 3 Then
Form6.ShowDialog()
Form6.Close()
Else
If e.RowIndex = 4 Then
Form7.ShowDialog()
Form7.Close()
Else
If e.RowIndex = 5 Then
Form8.ShowDialog()
Form8.Close()
End If
End If
End If
End If
End If
End If
End Sub
定义个全局变量lineindex
Private Sub DataGridView1_CellMouseDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDoubleClick
If e.RowIndex = 0 Then
MessageBox.Show("this row is column name ,it can not be edited ,please select the other row")
Else
lineindex=e.RowIndex
form.show
End If
End Sub
将fname设置为数组,分别存为相应的excel文件路径
在form加载的时候设置文件名为fname(lineindex)
怎样将fname设置为数组存为相应的路径?
谢谢你啊!我初学有些东西还不怎么懂!
一个简单的办法,2个form,1主,另一个显示数据
public id as integer '记录点击的列
public function con(fname,sqlstr) ’连接数据库
Dim str As String
Dim con As OleDb.OleDbConnection = New OleDb.OleDbConnection
Dim fName As String
fName = "c:SCOR2 ConfigurationLevel 2-Source.xls"
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & fName & ";Extended Properties=""Excel 8.0;HDR=YES;"""
con.Open()
sqlstr = "select [No] from [sheet1$] where predecessor like '%,%'"
end sub
然后加主窗体的datagridview_click加
id=得到当前id
数据窗体的form_load
select case id
case 1
con(连接字符串,要执行的sql)
case 2
……
end select
然后把数据集挂到datagridview上。
另外补充一点,要及时关闭con
谢谢了哈~搞出来了。
我是定了个全局变量:
Public ExcelPath As String ' ExcelPath to open several files at different location
然后分别一个一个的传下去,这样貌似简单些。
If e.RowIndex = 1 Then
Dim Frm As Form5 = New Form5()
Frm.ExcelPath = "c:SCOR2 ConfigurationLevel 2-Plan.xls" ' ExcelPath to open several files at different location
Frm.ShowDialog()
Else
If e.RowIndex = 2 Then
Dim Frm As Form5 = New Form5()
Frm.ExcelPath = "c:SCOR2 ConfigurationLevel 2-Source.xls"
Frm.ShowDialog()
…
…
03 31st, 2009
在程序运行时,我想对很多控件数组进行移动和自由拉伸。比如,点击它之后,它周围能出现8个点,我就能在8个方向上进行拉伸。有没有高手能帮我写个子程序或类似的东西,因为我要对image控件进行位伸,而有些控件是没有句柄的,所以,在子程序里不能有句柄。前面有个高手写了个,但有句柄就不行了。最后点击之后它周周围能出现8个点,那样给人一种能自由拉伸的感觉。我说的是VB6
VB的菜单,'工具'里面有添加控件集,自己去欣赏下那个代码,就可以了
帮你顶了
请高手指点啊,一楼说的不行。
03 31st, 2009
前几天分析一个程序的时候。
发现这个算法很诡异。 有点像ASCII 的算法
但是经过一段时间比对后。 觉得有点不对劲
所以发上来 给大家一起研究下
初步是这样的
这是加密的
1=D
D=W
W=j
j=}
}=1
12=DG=W=jq=}'
123=DG}
1234=DG}L
12345=DG}Lq
a=t
ab=tw
abc=twN
abcd=twN|
abcde=twN|B
反过来解密的话是这样的
解密
1=}
2=~
12=}|
123=}|H
1234=}|H{
12345=}|H{X
a=N
ab=NM
abc=NMx
abcd=NMxL
abcde=NMxL)
真是难理解。 如果分多的话。。 我全部给出来。 帮忙分析下这个算法
最简单的循环移动(ROT)算法,加密为 +19,解密为 -19。
不懂 帮顶……
哇 2楼的真厉害
最简单的循环移动(ROT)算法,加密为 +19,解密为 -19。
这个我是研究了 1个星期 才弄出来的..
还能更详细点么?
顶一下
1)字符个数不变
2)每个字符的映射固定
3)再比较一下变换前后的 Ascii 值就知道了。
只要能做到一一对应,不出现一对多,或多对一的情况,你就可以任意得设一个对应表.
其实就是密码字典.
这个也是被加密过的
谁能解出来?
EF$Fm`u0j6($s31('s:EDF4 ii21W15E3d12WP#132j6)$w41R_q
破解要么是知道算法、密文求密码,要么知道明文、密文猜(无密码的)算法。
只有密文 Mission Impossible。
这个ROT的算法应该只要 解密的数字就行了吧?
谁能解出这个字符串的 我给人民币!!
算了。 我觉得我的帖子没什么意义
麻烦斑竹把这帖子删除掉
谢谢了
03 31st, 2009
我想在grid上画图以实现程序的一些需要,比如画一些圆,折线等,效果类似于下面网址的那个效果,
http://zst.starlott.com/3d/jb.html
有没有办法实现,我想了很久了,好像vsgrid不提供在表格上画图的功能,我倒是想了一个办法,这个办法可能速度不行,还没实验呢,就是先在一个和表格一样大小的picture里画需要的图然后再根据表格把picture里的图分成一个一个的块,然后分别赋给相对应的单元格里。
顶一下,希望高手能发表一点意见
有没试过,在表格外画,用shape+line
是乎不该用表格来做这个,试试直接在窗体上画
呵呵,我也在想是否应该自己画了,正在考虑中。。。
我有一个思路,就是截获控件的WM_PAINT消息,先让控件本身绘制完,然后再绘制自己的图形,为了防止控件自动刷新,在完成绘图后需要明确指出控件的客户区为有效状态。如果嫌麻烦,那只能按你自己的思路进行了。
VB WebBrowser作编辑器,如何令ENTER换行而不是换段?
默认是ENTER换段的。
谢谢。
高手
高手来吧.
html里面换行: <br>
或者
<P> </P>
把web browser中接收的字符串, 替换
行不通.
换段它的HTML会是 <p> </p>,而换行是 <br>。
这个问题如果只是将其HTML输出的话,是可以用替换的方法解决的。
但是它有一个问题:如果是用按ENTER键来调用过程处理,那它就会在处理后留下一个 <p> </p>,并且下次处理前时不能消除。
求大虾帮忙。
LZ 想做什么 html编辑器? 问题说清楚点可以吗 可能是拦截enter按钮按后转换为 <br>什么的 可是你说的不清楚啊 http://www.vb110.com/ 不错 有好多技术文章 有空可以去看下
作编辑器,有意思!加一个Timer定时检查,如果有替换掉。
03 31st, 2009
在vb中 用Ado控件连接一个oracle 数据库
在ado属性页 填写命令文件(sql)
select * from mytable where enrolldate > 2008/01/01
显示错误ora-00932 不一致的数据类型,要求date得到的却是number
将语句改为select * from mytable where enrolldate > '2008/01/01'
显示错误ora-01861:文字与格式字符串不匹配
将语句改为select * from mytable where enrolldate > #2008/01/01#
显示错误ora-00911:无效字符
将语句改为select * from mytable where enrolldate > cdate(2008/01/01)
显示错误ora-00911:"cdate":无效的标识符
在英文状态下输入单引号
select * from mytable where enrolldate >'2008-01-01'
同样显示错误ora-01861:文字与格式字符串不匹配
表中的 enrolldate 是什么格式?
在pl/sql developer 中
用select * from mytable where enrolldate >'2008-01-01'
可以查询出来
不知道为什么ADo控件中却不行
日期格式
select * from mytable where enrolldate >'2008-01-01' '要在英文状态下输入单引号
我已经解决了.
select * from mytable where enrolldate >= to_date('2008-01-01','yyyy-mm-dd')
03 31st, 2009
在VB6中用WebBrowser控件编辑WORD文件
将DOC文件嵌入WebBrowser控件进行编辑,,这时候有的工具栏按钮失效了,用VBA把工具栏的各个按钮的ENABLE值改为TRUE还是不行。。这是为什么呢。。
微软有个开源的控件???
03 31st, 2009
VB6 + ado +ACCESS 做了个小程序,数据库连接给的也是网络文件夹的路径(应该没问题)
可是,情况是只有安装了VB软件的电脑可以使用,为什么呢?
开始报警少插件(.ocx),后来把system下的相关文件拷过去,结果不报警了
就是datagrid中没有数据显示,应该是没连上数据库,请高手指点怎么解决这个问题,谢谢
打包安装
用SetupFactory等工具
打包安装
用SetupFactory等工具
要把数据库共享吧,不共享应该不行的,你试试看。
谢谢楼上三位的意见,我已经尝试了,VB5.0,6.0都点上了,在别的机器商安装后还是报警
Class not registered
Looking for object with CLSID:{00000010-0000-0010-8000-00AA006D2EA4}
还有
Run-time eeror '713'
Class not registered
Looking for object with CLSID:{00000010-0000-0010-8000-00AA006D2EA4}
谁知道怎么回事吗?谢谢指点啊
在出错的机器上安装mdac2.8mdactype.exe试试,网上有下载的
在出错的机器上安装mdac2.8mdactype.exe试试,网上有下载的
制作个安装包不就行了
谢谢大家了
我的问题用2楼的
打包安装
用SetupFactory等工具
解决了
还是谢谢所有人哈
各位大哥,小弟最近用API函数调试串口,想做一个按输入的16进制字符串输出也是16进制的工具,使用Writefile写串口,但发现只能输入ASIIC范围内的字符串,试验时发现在“00”-“7F”没有问题,但超出7F就输出不正常,发现是受到ASIIC转换的限制,想问Writefile 是否能够向串口写入输出非ASIIC的字符,应该如何调整,附上部分代码请教,谢谢!
Public Declare Function WriteFile Lib "kernel32" _
(ByVal hFile As Long, ByRef lpBuffer As Any, _
ByVal nNumberOfBytesToWrite As Long, _
ByRef lpNumberOfBytesWritten As Long, _
ByRef lpOverlapped As Any) As Long 'OVERLAPPED) As Long
Private Sub cmdSend_Click()
Dim sSend As String
Dim lenBuf As Long '存放将要写入串口的数据长度
Dim NumberWritten As Long '用来记录写入的字节长度
Dim sSendchr As String
Dim sSendchrTEMP As Long
NumberWritten = 0
sSend = Trim$(txtInput.Text) '输入的16进制字符串数
lenBuf = Len(sSend) - 1
sSendchrTEMP = CInt("&H" & sSend) '字符串转换为16进制数
sSendchr = Chr(sSendchrTEMP) '取得ASIIC值
PurgeComm nSendHand, PURGE_RXABORT Or PURGE_RXCLEAR '清空缓冲区
If WriteFile(nSendHand, ByVal sSendchr, lenBuf, NumberWritten, ByVal 0&) <= 0 Then
MsgBox "向串口写数据发生错误!"
End If
Exit Sub
err:
MsgBox err.Description
End Sub
好像没有地方可以修改这个值,Chr函数只能获取0-127的ASIIC,一旦输入Chr(128或以上)输出的字符都是“?”,无法还原到ASIIC了。
用 ChrW()
不用字符串的方式,改用字节数组的方式发送就没这问题。也就是WriteFile中的Byval sSendChr这个参数改成字节数组或整形数组。
用ChrW还是不行,超过128的还是出现“?”
谢谢 “三楼的狼”,问题已经解决,加分