注册 登录
编程论坛 VB6论坛

SQL数据库建立的问题

recool 发布于 2014-02-21 11:37, 1693 次点击
代码如下:
SQL = "CREATE TABLE [dbo].[产品入库表] ("
  SQL = SQL & "[name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,"
  SQL = SQL & "[price] [numeric](18, 0) IDENTITY (1, 1) NOT NULL ,"
  SQL = SQL & "[number] [numeric](18, 0) IDENTITY (1, 1) NOT NULL ,"
  SQL = SQL & "[datet] [datetime] NOT NULL ,"
  SQL = SQL & "[content] [text] COLLATE Chinese_PRC_CI_AS NOT NULL ,"
  SQL = SQL & ") ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]"
  con.Execute SQL  


Private Sub Form_Load()
    Adodc1.ConnectionString = ConnectionString          '设置ADO控件的连接字符串
    = adCmdText                      '定义CommandType类型
    Adodc1.CursorLocation = adUseClient                 '定义CursorLocation类型
    Adodc1.LockType = adLockPessimistic                 '定义LockType类型
    Adodc1.RecordSource = "select * from 产品入库表"    '定义数据源,构造SQL语句
    Adodc1.Refresh                                      '刷新ADO数据控件
Dim i As Integer
For i = 1 To 6
    Set txtFields(i - 1).DataSource = Adodc1
    txtFields(i - 1).DataField = Adodc1.Recordset.Fields(i).Name
Next i
Set DataGrid1.DataSource = Adodc1
SetButtons True
End Sub


[local]1[/local]
31 回复
#2
lowxiong2014-02-21 15:30
sql语句错误,设置了两个IDENTITY,每个表只能有一个键值,一般用"id"来表示,这是记录唯一性的标志,可作为多表关系连接项,修改如下即可成功建表。

  SQL = "CREATE TABLE [dbo].[产品入库表] ("
  SQL = SQL & "[id] [numeric](18, 0) IDENTITY (1, 1) NOT NULL ,"
  SQL = SQL & "[name] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,"
  SQL = SQL & "[price] [numeric] NOT NULL ,"
  SQL = SQL & "[number] [numeric] NOT NULL ,"
  SQL = SQL & "[datet] [datetime] NOT NULL ,"
  SQL = SQL & "[content] [text] COLLATE Chinese_PRC_CI_AS NOT NULL ,"
  SQL = SQL & ") ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]"
  con.Execute SQL
#3
recool2014-02-22 10:37
当我输入的时候老报错,想将第一项id改为入库时间可否
只有本站会员才能查看附件,请 登录
#4
recool2014-02-22 11:06
还有一个出库表,入库表和出库表如何做相减运算呀,虚心请教
#5
lowxiong2014-02-22 11:26
你不是要出库表或入库表,而是要一个库存表和一个库存操作表,库存表包含项目为:产品id、产品名,产品数量、出产地、单价和产品特性,库存操作表包含:产品id、操作类型(-1出库、1入库、0产品损坏)、数量、操作日期、操作人。
#6
w3609894262014-02-22 13:49
楼主建议你直接使用adodc控件,方便快捷
#7
w3609894262014-02-22 13:52
把你的文件发上来
#8
recool2014-02-22 18:22
恩,就是这个意思,请教楼主如何实现呀。。
#9
recool2014-02-22 18:41
文件发不上去,可否给我提供些源代码参考,谢谢了!!46366190@
#10
recool2014-02-22 19:32
版主,大虾们看下,调试不过,谢谢了
Dim strSQL As String
    '查询不能为空
    If Trim(txtName.Text) = "" Then
        MsgBox "查询姓名不能为空!", vbOKOnly + vbExclamation, "警告!"
        '设置鼠标焦点
        txtName.SetFocus
        Exit Sub
    End If
    '获得产品名称的查询条件
    strSQL = "Select * From 产品入库表 Where 名称 like " _
             + "'" + Replace(Trim(txtName.Text), "'", "''", 1) + "%'"
    Adodc1.ConnectionString = ConnectString
    '设置Adodc1的命令类型和记录源
    = adCmdText
    Adodc1.CursorLocation = adUseClient                 '定义CursorLocation类型
    Adodc1.LockType = adLockPessimistic                 '定义LockType类型
    Adodc1.RecordSource = strSQL
    Adodc1.Refresh                                       '刷新Adodc1


只有本站会员才能查看附件,请 登录
#11
w3609894262014-02-23 22:17
回复 10楼 recool
Private Sub cmdAdd_Click()
  '如果有错则转入出错处理部分
    On Error GoTo AddErr
    '添加一条新纪录
    Adodc1.Recordset.AddNew
    '设置按钮状态
    SetButtons False
   
    Exit Sub
AddErr:
    '显示出错信息
    MsgBox Err.Description

End Sub
你这添加入库的代码写的我都看不懂。。我也不知道你为什么要这么写
既然你用text来作为载体,那你根本就不用这么写啊,
而且根本不需要去建造text控件组,用单独的控件不是挺好的么??
这样,我给你一个思路
首先在text上填写你所要录入的数据,然后在insert 插入数据库
最后在adodc1.refresh
这样你的所添加的就能反应在datagrid控件上了,本来这是一个很简单的事情,你这么一写,就复杂了
#12
w3609894262014-02-26 17:27
回复 楼主 recool
Private Sub Command3_Click()
    Dim i As Integer
    If CheckBox2.Value = True Then
        MsgBox "已经结算过的明细,无法在计算!", vbOKOnly + vbExclamation, "错误信息"
        Exit Sub
    End If
    If MsgBox("确定要结算当前的表格所显示的库存吗?" & Chr(13) & "结算后无法在更改“退货数量”,“报损数量”,“退货数量”!确定吗?", vbYesNo + vbInformation, "提示信息") = vbYes Then
        Adodc1.Recordset.MoveFirst
        For i = 1 To Adodc1.Recordset.RecordCount
            退货数量 = Adodc1.Recordset.Fields("退货数量")
            出库数量 = Adodc1.Recordset.Fields("出库数量")
            报损数量 = Adodc1.Recordset.Fields("报损数量")
            id_出库单表 = Adodc1.Recordset.Fields("id_出库单表")
            id_公司货物名称 = Adodc1.Recordset.Fields("id_公司货物名称")
             sql1 = "update 仓库货物表 set 库存量 = 库存量-" & 出库数量 & "+" & 退货数量 & " where id_公司货物名称='" & id_公司货物名称 & "'"
             Adodc1.Recordset.ActiveConnection.Execute sql1
             sql1 = "update 出库单表 set 库存结算=1 where id_出库单表='" & id_出库单表 & "'"
             Adodc1.Recordset.ActiveConnection.Execute sql1
            If Adodc1.Recordset.EOF = False Then
                Adodc1.Recordset.MoveNext
            End If
        Next
    End If
    Adodc1.Refresh
    Call 初始化退货单列表框
MsgBox "所有物品已经结算完毕!", vbOKOnly + vbInformation, "提示信息"
End Sub
我最近也在坐这个,给你看看我写的,下图书数据库图,你看看不懂的在问把
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
#13
w3609894262014-02-26 17:33
回复 11楼 w360989426
你这出入库写的太复杂了,没有这么复杂的,我写的订单录入的程序也没这么复杂过,
一定要有好的思路,不然写出来的是很乱,可改性很差的!
#14
recool2014-02-28 16:22
能将你的程序发上来或者发给我吗
#15
w3609894262014-02-28 21:03
回复 14楼 recool
你的设计与我的设计不一样啊,发给你看,也没用啊。。但是你只要有一个思路,知道怎么做就可以了,首先库存表,与出入库表,你可以将入库与出库分开来都可以了,在入库与出库表上有个字段是用来判断记录是否被计算过,如果计算过就不在计算,没有计算就update库存,就可以了
#16
recool2014-03-02 22:14
调试不过,一直提示Adodc1.Refresh 刷新失败 帮忙看下有什么错误
Dim strSQL As String
    '查询不能为空
    If Trim(txtName.Text) = "" Then
        MsgBox "查询名不能为空!", vbOKOnly + vbExclamation, "警告!"
        '设置鼠标焦点
        txtName.SetFocus
        Exit Sub
    End If
    '获得产品名称的查询条件
    strSQL = "Select * From 产品入库表 Where 名称 like " _
             + "'" + Replace(Trim(txtName.Text), "'", "''", 1) + "%'"
      '设置Adodc1的命令类型和记录源
    Adodc1.ConnectionString = ConnectString
    = adCmdText
    Adodc1.CursorLocation = adUseClient                 '定义CursorLocation类型
    Adodc1.LockType = adLockPessimistic                 '定义LockType类型
    Adodc1.RecordSource = strSQL
    Adodc1.Refresh                                       '刷新Adodc1
#17
recool2014-03-02 22:15
是我的查询条件设置的错误吗?
#18
w3609894262014-03-02 22:59
回复 17楼 recool
什么提示?目测你的sql语句后面like写的有问题,建议放到sql查询器中调试
#19
recool2014-03-03 10:14
提示这步错误  Adodc1.Refresh   '刷新Adodc1
#20
w3609894262014-03-03 15:15
回复 19楼 recool
肯定是你的sql语句写的有问题,把你的数据库发到我邮箱,我来看看
#21
recool2014-03-04 22:05
strSQL1 = "Select * From 产品出库表 Where 名称 like " _
             + "'" + Replace(Trim(Text1.Text), "'", "''", 1) + "%'"
#22
recool2014-03-04 22:08
请教大虾们有何错误
#23
lowxiong2014-03-05 07:16
应该是对replace使用错误,你大概是要消除单引号,但你的语句却是把一个单引号用两个单引号代替了,假如你的原文本是“abcd'ef”,用你的replace后就变成“abcd''ef”了,正确语句如下:
strSQL1 = "Select * From 产品出库表 Where 名称 like " _
             + "'" + Replace(Trim(Text1.Text), "'", "", 1) + "%'"
#24
recool2014-03-07 10:03
还是调试不过呀。。[附件]1[/附件]
#25
recool2014-03-07 10:13
只有本站会员才能查看附件,请 登录
#26
w3609894262014-03-08 14:11
回复 25楼 recool
你这个代码从哪里弄来的啊?感觉不像是你自己写的么,用别人的代码要先读懂别人的意思啊
#27
recool2014-03-09 20:25
strSQL1 = "Select * From 产品出库表 Where 名称 like Trim(Text1.Text)"
这个为何也不行
#28
w3609894262014-03-09 22:26
回复 27楼 recool
strSQL1 = "Select * From 产品出库表 Where 名称 like'" & Trim(Text1.Text) & "'"
1看就知道你不懂语法规则。。。。。。。。
凡是sql语句中变量是vb的变量 都要加上'"& 变量 &"'
#29
recool2014-03-11 19:45
依然无法查询 还是报未发现数据库名称并且未指定数据库驱动,然后报对象Refresh的方法IAdodc失败
#30
w3609894262014-03-13 00:01
回复 29楼 recool
朋友,你检查一下你的adodc控件有没有设置连接属性..........
#31
recool2014-03-20 21:50
设置了,测试连接也成功了。但还是无法查询,何解????
#32
recool2014-03-20 21:51
还是报同样的错误提示
1