VB程序员博客

VB程序开发

想请教一下各位:
 我在form_load里的时候设定了 set dtpicker.datarouse=adodc1
  dapicker.datafileds="日期"
为什么我做了个关闭的按钮 点关闭的时候里面设定 if adodc1.recordset.recordcount=0 then
  set dtpicker.datarouse=nothing
  dtpicker.datafields=""
结果会报错?实时错误545 不能绑定到字段或数据成员“日期”不清楚怎么办,不过为什么dtp要绑定。
select,以后 value = 不就行了吗。


VB datagrid绑定了adodc.修改了datagrid数据后能不能不更新.具体代码
网上搜过,不绑定可以,怎么实现.
Private Sub Command1_Click()
Dim con As ADODB.Connection
Set con = New ADODB.Connection
con.ConnectionString = "Driver={sql server};server=Mserver;uid=sa;pwd=future?20061101;database=AIS20080319083923"
con.Open
fid = Text1.Text
Adodc1.ConnectionString = "Driver={sql server};server=Mserver;uid=sa;pwd=future?20061101;database=AIS20080319083923"
Adodc1.RecordSource = "select b.fShortNumber,b.fname,b.fmodel,a.FGMPBatchNO,unname=d.fname,a.FAuxQty from ICMO a inner join t_icitem b on b.fitemid=a.fitemid inner join t_UnitGroup c on b.funitgroupid=c.funitgroupid inner join t_measureunit d on d.funitgroupid=b.funitgroupid and d.fmeasureunitid=a.funitid  where FBillNo='" & fid & "'"
Adodc1.Refresh
Set DataGrid1.DataSource = Adodc1
h = con.Execute("select t_Department.Fname,t_Department.FItemID from ICMO inner join t_Department on ICMO.FWorkShop=t_Department.FItemID where FBillNo='" & fid & "'")
Label8.Caption = h(0)
End Sub


没用过这个,以前都是用MSHFlexGrid可以用ADO
现在我要用DataGrid实现和SQL数据库绑定修改起来比较方便,但是在上面的某些操作又要用SQL语句执行,具体该怎么使用这个控件,最好有例子代码

只要把datagrid的datasource属性选择   adodc1控件的名称即可!
datagrid.datasource=adodc1


我在数据库中的数是:32.04,但是在MSHFlexGrid显示却变成了32.040001
                  70.08                            70.080002
                  41.04                            41.040001
                  96.59                            96.599998
都是类似于这样的结果,这是怎么回事呢????????????

引用 1 楼 Leftie 的回复:
select cast(abc as decimal(20,2)) as abc from tablename

这个语句我没太看懂,能写详细点吗????

请问有人知道MSHFlexGrid显示要怎么设置吗??急!!

不可能出现这样的问题啊,我是没见过

用Format(MshFlexGrid1.TextMatrix(1, 1),".00")格式化一下也就行(循环处理),不过感觉应该没1楼(没试验)的效率高

SQL联机丛书的帮助:
Transact-SQL 参考

CAST 和 CONVERT
将某种数据类型的表达式显式转换为另一种数据类型。CAST 和 CONVERT 提供相似的功能。

语法
使用 CAST:

CAST ( expression AS data_type )

使用 CONVERT:

CONVERT (data_type[(length)], expression [, style])

参数
expression

是任何有效的 Microsoft⮠SQL Server™ 表达式。有关更多信息,请参见表达式。

data_type

目标系统所提供的数据类型,包括 bigint 和 sql_variant。不能使用用户定义的数据类型。有关可用的数据类型的更多信息,请参见数据类型。

length

nchar、nvarchar、char、varchar、binary 或 varbinary 数据类型的可选参数。

style

日期格式样式,借以将 datetime 或 smalldatetime 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型);或者字符串格式样式,借以将 float、real、money 或 smallmoney 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型)。

SQL Server 支持使用科威特算法的阿拉伯样式中的数据格式。

在表中,左侧的两列表示将 datetime 或 smalldatetime 转换为字符数据的 style 值。给 style 值加 100,可获得包括世纪数位的四位年份 (yyyy)。

不带世纪数位 (yy) 带世纪数位 (yyyy)
标准
输入/输出**
- 0 或 100 (*)  默认值 mon dd yyyy hh:miAM(或 PM)
1 101 美国 mm/dd/yyyy
2 102 ANSI yy.mm.dd
3 103 英国/法国 dd/mm/yy
4 104 德国 dd.mm.yy
5 105 意大利 dd-mm-yy
6 106 - dd mon yy
7 107 - mon dd, yy
8 108 - hh:mm:ss
- 9 或 109 (*)  默认值 + 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM)
10 110 美国 mm-dd-yy
11 111 日本 yy/mm/dd
12 112 ISO yymmdd
- 13 或 113 (*)  欧洲默认值 + 毫秒 dd mon yyyy hh:mm:ss:mmm(24h)
14 114 - hh:mi:ss:mmm(24h)
- 20 或 120 (*)  ODBC 规范 yyyy-mm-dd hh:mm:ss[.fff]
- 21 或 121 (*)  ODBC 规范(带毫秒) yyyy-mm-dd hh:mm:ss[.fff]
- 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm(不含空格)
- 130* 科威特 dd mon yyyy hh:mi:ss:mmmAM
- 131* 科威特 dd/mm/yy hh:mi:ss:mmmAM

*    默认值(style 0 或 100、9 或 109、13 或 113、20 或 120、21 或 121)始终返回世纪数位 (yyyy)。
** 当转换为 datetime 时输入;当转换为字符数据时输出。
*** 专门用于 XML。对于从 datetime 或 smalldatetime 到 character 数据的转换,输出格式如表中所示。对于从 float、money 或 smallmoney 到 character 数据的转换,输出等同于 style 2。对于从 real 到 character 数据的转换,输出等同于 style 1。

重要  默认情况下,SQL Server 根据截止年份 2049 解释两位数字的年份。即,两位数字的年份 49 被解释为 2049,而两位数字的年份 50 被解释为 1950。许多客户端应用程序(例如那些基于 OLE 自动化对象的客户端应用程序)都使用 2030 作为截止年份。SQL Server 提供一个配置选项("两位数字的截止年份"),借以更改 SQL Server 所使用的截止年份并对日期进行一致性处理。然而最安全的办法是指定四位数字年份。

当从 smalldatetime 转换为字符数据时,包含秒或毫秒的样式将在这些位置上显示零。当从 datetime 或 smalldatetime 值进行转换时,可以通过使用适当的 char 或 varchar 数据类型长度来截断不需要的日期部分。

下表显示了从 float 或 real 转换为字符数据时的 style 值。

值 输出
0(默认值) 最大为 6 位数。根据需要使用科学记数法。
1 始终为 8 位值。始终使用科学记数法。
2 始终为 16 位值。始终使用科学记数法。

在下表中,左列表示从 money 或 smallmoney 转换为字符数据时的 style 值。

值 输出
0(默认值) 小数点左侧每三位数字之间不以逗号分隔,小数点右侧取两位数,例如 4235.98。
1 小数点左侧每三位数字之间以逗号分隔,小数点右侧取两位数,例如 3,510.92。
2 小数点左侧每三位数字之间不以逗号分隔,小数点右侧取四位数,例如 4235.9819。 

返回类型
返回与 data type 0 相同的值。

decimal 和 numeric
带定点精度和小数位数的 numeric 数据类型。

decimal[(p[, s])] 和 numeric[(p[, s])]

定点精度和小数位数。使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1。decimal 的 SQL-92 同义词是 dec 和 dec(p, s)。

p(精度)

指定小数点左边和右边可以存储的十进制数字的最大个数。精度必须是从 1 到最大精度之间的值。最大精度为 38。

s(小数位数)

指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从 0 到 p 之间的值。默认小数位数是 0,因而 0 <= s <= p。最大存储大小基于精度而变化。

精度 存储字节数
1 - 9 5
10-19 9
20-28 13
29-38 17

引用 5 楼 jieweibin 的回复:
用Format(MshFlexGrid1.TextMatrix(1, 1),".00")格式化一下也就行(循环处理),不过感觉应该没1楼(没试验)的效率高

谢谢!!我用的这个方法,然后刷新了一下,已经可以了,非常感谢!!


语言是VB。用DATA控件连接ACCESS数据库,数据库中图片只是存储了路径,picture如何绑定数据库里的图片路径这个字段?并且绑定图片路径这个字段后怎样跟随其他记录移动啊!例如:我想查询名字是张三记录,text1显示张三年龄,text2显示张三班级…….picture显示张三的图片;我要查询名字是李四的记录,text1显示李四年龄,text2显示李四的班级……..picture显示李四的图片………………?新手上路,谢谢啊!

可是如何让图片路径这个字段后跟随其他记录移动呢?

Private Sub Data1_Reposition()
  Picture1.picture=LoadPicture(data1.fields("图片"))
End Sub
大概就是这样子吧,好久不用Data控件了
这个代码没测试

MSDN对Data1_Reposition事件的解释:
当加载一个 Data 控件时,Recordset 对象中的第一条记录成为当前记录,会发生 Reposition 事件。无论何时只要用户单击 Data 控件上某个按钮,进行记录间的移动,或者使用了某个 Move 方法(如 MoveNext),Find 方法(如 FindFirst),或任何其它改变当前记录的属性或方法,在每条记录成为当前记录以后,均会发生 Reposition 事件。

Picture1.picture=LoadPicture(data1.fields("图片"))
这个调试时说方法不正确!不管怎样还是很感谢你啊!

Private Sub Data1_Reposition()
    Picture1.Picture = LoadPicture(Data1.Recordset.Fields("图片"))
End Sub
你的字段名未必是"图片",按你的实际情况该

谢谢你,虽然不是这样做的,仍然谢你!呵呵!

谢谢你,虽然不是这么做的,仍然感谢你!呵呵!


      strSQl = "select * from students"
     
      Dim rst_student2 As New ADODB.Recordset
      rst_student2.Open strSQl, cnn, adOpenKeyset, adLockOptimistic     
      If rst_student2.RecordCount > 0 Then
            accout_array.ReDim 0, rst_student2.RecordCount - 1, 0, 4
            TDBGrid1.Close True
            i = 0
            rst_student2.MoveFirst
            Do While Not rst_student2.EOF
              accout_array(i, 0) = rst_student2!stuId
              accout_array(i, 1) = rst_student2!stuName
              accout_array(i, 2) = rst_student2!sex
              accout_array(i, 3) = rst_student2!phone
              accout_array(i, 4) = rst_student2!address
              i = i + 1
              rst_student2.MoveNext
            Loop
        TDBGrid1.Array = accout_array
        TDBGrid1.ReBind
        TDBGrid1.Refresh

  在窗体上TDBGrid1显示不了数据。


就是绑定了DataCombo和Adodc,但是我想在里面加一条我自己想加的记录。
例如:显示了
      大牛
      二牛
      三牛
但是我想显示成
      无
      大牛
      二牛
      三牛
不知道DataCombo有没有可能实现这个功能,数据库已经固定了,不能修改了。


就是绑定了DataCombo和Adodc,但是我想在里面加一条我自己想加的记录。
例如:显示了
      大牛
      二牛
      三牛
但是我想显示成
      无
      大牛
      二牛
      三牛
不知道DataCombo有没有可能实现这个功能,数据库已经固定了,不能修改了。


  cndb.Open CnString
  strsql = "select * from style"
  rs.Open strsql, cndb

接下去用什么语句来 绑定 sql语句的结果集并在vsflexgrid显示出来呢?

请大家给点主意好吗?

看看有没有 Bind 方法,做个应该看看控件帮助,里面应该有描述的。

Set MSFlexGrid1.DataSource = rs

各位 。。。不行啊。。Set MSFlexGrid1.DataSource = rs 提示 对象不支持该属性或方法

使用MSHFlexGrid控件

用 vsflexgrid 不行吗?

你用的到底是vsflexgrid还是MSFlexGrid
MSFlexGrid不能绑ADO,用MSHFlexgrid

我要用vsflexgrid 来进行绑定rs的结果集

引用 8 楼 chenstu 的回复:
我要用vsflexgrid 来进行绑定rs的结果集

不能用ado应该用dao

什么意思的啊??
vsflexgrid 没有 datasource这个属性。。还有什么办法来进行绑定吗?

要用vsflexgrid(oledb)控件,才会有绑定功能
set vsflexgrid.datasource=oRst

可是 就是vsflexgrid就没有datasource这个属性啊。。所以无法运行vsflexgrid.datasource=oRst

要用vsflexgrid(oledb)控件
要用vsflexgrid(oledb)控件
要用vsflexgrid(oledb)控件

那就通过循环语句写入空间吧

谢谢大家。。呵呵。。。。。。。。。。。。。。


        Dim strsql As String
        strsql = "select * from 合同表 where '" & Trim(cobSerch.Text) & "'='" & Trim(txtSerchz.Text) & "'"
        dbConn.Execute strsql

点击搜索,把查找的数据绑定到datagrid控件上,下面该怎么写,谢谢

    strsql = "select * from 合同表 where '" & Trim(cobSerch.Text) & "'='" & Trim(txtSerchz.Text) & "'"   
    Conn.Open
    Rs.CursorLocation = adUseClient
    Rs.Open strsql,Conn, adOpenStatic, adLockOptimistic
    
    Set DataGrid.DataSource = Rs

学习

ref: m1   :)
Set Me.DataGrid1.DataSource = Rs 

VBScript code
Set Me.DataGrid1.DataSource = Rs
====  ====