| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3970 人关注过本帖
标题:求助,读取文本写入数据库
取消只看楼主 加入收藏
huihuihuiol
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-11-14
结帖率:0
收藏
已结贴  问题点数:20 回复次数:10 
求助,读取文本写入数据库
请大神帮忙解决一下VB6.0将数据读取到数据库中的问题。
1,0
20004,0
-2.432280,0.766335
-2.510024,0.266551
-1.965815,-0.177701
-2.099091,-0.177701
-1.777008,-0.977354
-1.332756,-1.055098
-0.799654,-0.733016
-0.655272,-0.944035
-0.577528,-0.721909
0.499783,-1.055098
0.866291,-1.155055
1.199480,-0.910717
0.388720,-0.577528
0.155488,-0.555315
0.188807,-0.433146
-1.121736,0.222126
-1.166161,0.111063
-0.977354,-0.055531
-1.077311,-0.333189
-1.466031,-0.233232
-1.410500,0.099957
-2.432280,0.766335
-666666.0,-666666.0
2,0
20004,0
1.032886,-0.299870
1.399394,-0.077744
1.510457,-0.255445
2.121303,-0.344295
2.432280,-0.099957
2.476705,0.666378
2.476705,1.243906
1.454925,1.432713
1.043992,1.432713
0.755228,1.210587
0.344295,1.499350
0.144382,1.488244
-0.122169,1.110630
0.199913,0.932929
0.510890,1.099524
0.821866,1.010673
0.577528,0.888504
0.644165,0.499783
1.366075,0.610846
1.510457,0.288764
0.966248,0.211020
1.032886,-0.299870
-666666.0,-666666.0
......
655,0
30000,0
-61.083709,-40.126949
-666666.0,-666666.0
-999999,-999999

数据的格式大致像上面的一样,就是有很多相同的一小块一小块
数据说明,
1,0      其中数据1要读到数据库中的TgtID字段
20004,0   其中数据2004读到数据库的layer字段
-2.432280,0.766335  这两个数据分别读取到数据库的X和Y字段
每一小块结束的标志为-666666.0,-666666.0
整个文件结束的标志为-999999,-999999

数据表的字段
X   Y   TgtID   layer
相关文件已上传
相关数据.zip (413.27 KB)
搜索更多相关主题的帖子: 读取 写入 数据库 数据 字段 
2017-11-14 16:17
huihuihuiol
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-11-14
收藏
得分:0 
回复 2楼 风吹过b
好的,我在VB上看看行不行,谢谢你,如果有问题可以直接向您提问吗?
2017-11-14 18:17
huihuihuiol
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-11-14
收藏
得分:0 
回复 3楼 huihuihuiol
您好,在数据库的表中表的字段是这样的
编号 X  Y  TgtID layer

编号是自动的,这样的话,此句该怎么改 sql="INSERT INTO 表名 (X, y,TgtID,layer) VALUES (" & dx & "," & dy & "," & TgtID & "," & layer & ");"
2017-11-14 18:50
huihuihuiol
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-11-14
收藏
得分:0 
回复 2楼 风吹过b
您好,在数据库的表中表的字段是这样的
编号 X  Y  TgtID layer

编号是自动的,这样的话,此句该怎么改 sql="INSERT INTO 表名 (X, y,TgtID,layer) VALUES (" & dx & "," & dy & "," & TgtID & "," & layer & ");"
2017-11-14 18:59
huihuihuiol
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-11-14
收藏
得分:0 
回复 6楼 风吹过b
就是那个字段可以忽略吗?还有一个问题,就是在您的程序中,没有看到对Igtid赋值的语句,而在给字段添加数据时却出现了
2017-11-14 20:23
huihuihuiol
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-11-14
收藏
得分:0 
回复 3楼 huihuihuiol
Private Sub Command1_Click()
Dim DX As Double
Dim DY As Double
Dim iTgtID As Integer
Dim iLayer As Long
Dim sList() As Variant
Dim dataFile As String
Dim accessFile As String
Dim Flag As Integer

With CommonDialog1
    .Filter = "数据文件(*.*)|*.*"       '设置选择文件的格式
    .ShowOpen
End With
dataFile = CommonDialog1.fileName

With CommonDialog1
    .Filter = "数据库*.mdb)|*.mdb"       '设置选择文件的格式
    .ShowOpen
End With
accessFile = CommonDialog1.fileName

Dim s As String '定义一个字符型变量,用于存储读取文本中的一行
Open fileName For Input As #1 '打开原始数据

Do
   Line Input #1, s
   If InStr(s, ",") > 1 Then      '忽略空行
     sList = Split(s, ",")             '分解为二段
      If sList(1) = 0 Then       '为tgtid 或 layer 或尾
        If Split(0) > 655 Then 'Layer的最小值-1 ,或者可能的 TgtID 最大值
           iLayer = sList(0)          '取 Layer
        Else
           iTgtID = sList(0)

      ElseIf Split(0) = -666666# Then     '段结束
         layer = 0              '置段标记
         tgtid = 0
      ElseIf Split(0) = -999999 Then  '文件结束
         Flag = 1
      End If
   Else                '不属于以上三种情况,置X,Y
      DX = Split(0)
      DY = Split(1)
   End If
  
   If Flag = 1 Then Exit Do

Dim db As Database
Dim iTB As TableDef
'Dim tb2 As TableDef
Dim rs As Recordset
'Dim rs2 As Recordset
Set db = OpenDatabase(accessFile)                 '打开数据库
Set rs1 = db.OpenRecordset("MainInfo") '打开数据表

  If iLayer > 0 And iTgtID > 0 Then
     rs.AddNew
     rs.Fields(1).Value = DX
     rs.Fields(2).Value = DY
     rs.Fields(3).Value = iTgtID
     rs.Fields(4).Value = iLayer
  End If
  End If
Loop

Close #1
rs.Close
End Sub

这是我根据您的思路写的,有些地方改了,请您帮我看看
2017-11-14 20:51
huihuihuiol
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-11-14
收藏
得分:0 
回复 8楼 风吹过b
我试着去运行这个程序,就是在循环的第一次和第二次时数据库的表格的X Y都是0,
最终程序是出错的。
我的理解大概就是您这样读取数据使得每读一块都会多生成了两行X  Y是0的数据
2017-11-14 21:31
huihuihuiol
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-11-14
收藏
得分:0 
回复 11楼 风吹过b
好的,谢谢你
我应经调了
2017-11-14 21:39
huihuihuiol
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-11-14
收藏
得分:0 
回复 13楼 风吹过b
好的,我试试,
读取这个的目的就是,在每一块中的layer和tgtid都是一样的而X  Y就是段头下面的那些坐标值

我刚刚学的VB 然后老师要求做这样的一个课程设计有很多不懂的,还望您不要嫌弃我的麻烦
2017-11-14 21:43
huihuihuiol
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-11-14
收藏
得分:0 
回复 9楼 风吹过b
您好,这是我写的程序,但是执行完了之后数据库中没有添加任何的记录
可以帮我看看吗?
Private Sub Command1_Click()
Dim DX() As Double
Dim DY() As Double
Dim TgtID As Long
Dim Layer As Integer
'Dim count As Long
Dim db As Database
'Dim iTB As TableDef
Dim rs As Recordset
Dim s As String
Dim sList() As String

With CommonDialog1
    .Filter = "数据文件(*.*)|*.*"       '设置选择文件的格式
    .ShowOpen
End With
dataFile = CommonDialog1.FileName

With CommonDialog1
    .Filter = "数据库*.mdb)|*.mdb"       '设置选择文件的格式
    .ShowOpen
End With
accessFile = CommonDialog1.FileName
Set db = OpenDatabase(accessFile)     '打开数据库
Set rs = db.OpenRecordset("MainInfo") '打开数据表

ReDim Preserve sList(0) As String
sList(0) = "-666666.0"
ReDim Preserve sList(1) As String
sList(1) = "-666666.0"
Open dataFile For Input As #1 '打开原始数据

Do
   
   
   If sList(0) = -666666# And sList(1) = -666666# Then
      Line Input #1, s
      sList = Split(s, ",")
      If sList(0) = -999999 And sList(1) = -999999 Then Exit Do
      TgtID = sList(0)
      Line Input #1, s
      sList = Split(s, ",")
      Layer = sList(0)
      
      i = 0
      Do Until sList(0) = -666666# And sList(1) = -666666#
         Line Input #1, s
         sList = Split(s, ",")
         ReDim Preserve DX(i) As Double
         ReDim Preserve DY(i) As Double
         DX(i) = sList(0)
         DY(i) = sList(1)
         i = i + 1
      Loop
      ReDim Preserve DX(UBound(DX) - 1) As Double
      ReDim Preserve DY(UBound(DY) - 1) As Double
      
         If sList(0) = -666666# And sList(1) = -666666# Then
'            count = 0
            For i = 0 To UBound(DX) - 1
               rs.AddNew
               rs.Fields(1).Value = DX(i)
               rs.Fields(2).Value = DY(i)
               rs.Fields(3).Value = TgtID
               rs.Fields(4).Value = Layer
               Refresh
'               rs.Update
'               count = count + 1
            Next i
'            rs.Update
'         Exit Do
         End If
'     Loop
   End If
Loop
'rs.Update
rs.Close
db.Close
Close #1

End Sub
2017-11-16 10:23
快速回复:求助,读取文本写入数据库
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017140 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved