....sqlstr = "select log_Time AS Tm from " & stationID & " where ((log_Date=#" & Arocon & "#) and (log_Time=#" & data_stream(1) & "#))"-----查询语句,判断Access数据库中是否有符合条件的记录Conn.Execute sqlstr----执行1
            
If Rs.EOF Thensqlstr = "insert into " & stationID & "(log_Date,log_Time,Hcon,State,Load,Allweight,Mfiux,FFiux) values ('" & data_stream(0) & "','" & data_stream(1) & "','" & data_stream(2) & "','" & data_stream(3) & "','" & data_stream(4) & "','" & data_stream(5) & "','" & data_stream(6) & "','" & data_stream(7) & "')"-----插入语句,如果Access数据库中没有符合条件的记录则插入Conn.Execute sqlstr----执行1
.....‘===================================
以上为主要部分,两条sqlstr全部自动生成。流程:生成查询语句->执行->(如果没有记录)生成插入语句->执行。问题:当数据库中为空,即每个表中都没有数据时候,执行顺利,数据插入成功;但是当数据库中存在数据时候,即使只有一张表中存在一条数据时候,查询sqlstr“执行1”就不执行了。请达人指点,小弟感激不尽~~~

解决方案 »

  1.   

    以上为主要部分,两条sqlstr全部自动生成。流程:生成查询语句->执行->(如果没有记录)生成插入语句->执行。如果有记录就跳过了呀!(希望我没理解错)
      

  2.   

    首先谢谢你的及时回复。没错,流程是这样。但是出现了个奇怪的问题。
    当数据库中有记录(即使只有一个表中有一条数据),那么生成的查询语句sqlstr="select..."就不执行了。也可以理解为,第一次运行数据库各表都没有数据,执行正常,即插入数据。
    第二次执行,这时候数据库中已经有第一次之后后插入的数据了。这时候那条sqlstr=“selecet ...”就不执行了。不知道我又没有说清楚,再次期待你的回复,谢谢
      

  3.   

    循环没有问题,这一点我查了。每次循环生成sqlstr="select ...",而且当数据库中存在数据后生成的sqlstr我在Access中验证过了,可以执行。但是就是不被conn.execute调用。
      

  4.   

    1.问题:当数据库中为空,即每个表中都没有数据时候,执行顺利,数据插入成功;但是当数据库中存在数据时候,即使只有一张表中存在一条数据时候,查询sqlstr“执行1”就不执行了。有2个执行1,不知道你指的是哪个?2.If Rs.EOF Then 是不是应该写成 If rs.recordcount=0 then ?
      

  5.   

    是不是不能给 Rs 值啊?
    Set Rs=Conn.Execute sqlstr
      

  6.   

    呵呵,谢谢两位。不好意思,一着急给写错了。
    sqlstr="select ..."
    conn.Execute sqlstr----执行一sqlstr="insert ..."
    conn.Execute sqlstr----执行二是当数据库中有数据时,执行一不执行了。
      

  7.   

    也就是说Rs纪录为空的时候执行 执行一 不空的时候执行 执行二 对不对啊?
    If Rs.Eof=True Then(或者是 Rs.recordcount=0)
        Con.Exec 执行一
    Else
        Con.Exec 执行二
    Endif
    这样吗?
      

  8.   

    Conn.Execute sqlstr----执行1If Rs.EOF Then  '这里没给Rs赋值,所以每次都是EOF,每次都执行Insert into
    sqlstr = "insert into
    ---------------------
    Set Rs = Conn.Execute(sqlstr) '改正执行1If Rs.EOF Then  '这里没给Rs赋值,所以每次都是EOF,每次都执行Insert into
    sqlstr = "insert into
      

  9.   

    Public Function Push_Data()                                           
        Dim Arrsub() As String
        Dim Arrdata() As String
        Dim Arrcon() As String
        Dim i, j, k As Integer
        Dim sqlstr As String
        Dim counter, time1 As Long
        Dim Arocon As String
        
        time1 = 2
        
        
        Arrsub = Split(TempData, Chr(10))
        For i = 0 To UBound(Arrsub)
            If InStr(1, Arrsub(i), ",", 1) <> 0 Then
                Arrsub(i) = Replace(Arrsub(i), " ", "")
                Arrdata = Split(Arrsub(i), ",")
                Arrcon = Split(Arrdata(0), "-")
                
                Arocon = Arrcon(1) & "-" & Arrcon(0) & "-" & Arrcon(2)
                data_stream(0) = Arrcon(2) & "-" & Arrcon(1) & "-" & Arrcon(0)
                data_stream(1) = Arrdata(1)
        
                For j = 3 To UBound(Arrdata)
                    Select Case Arrdata(j)
                        Case Is = "58"
                            If Arrdata(j + 1) <> "" Then
                            data_stream(2) = Arrdata(j + 1)
                            Else
                            data_stream(2) = "99999"
                            End If
                        Case Is = "41"
                            If Arrdata(j + 1) <> "" Then
                            data_stream(3) = Arrdata(j + 1)
                            Else
                            data_stream(3) = "99999"
                            End If
                        Case Is = "35"
                            If Arrdata(j + 1) <> "" Then
                            data_stream(4) = Arrdata(j + 1)
                            Else
                            data_stream(4) = "99999"
                            End If
                        Case Is = "9"
                            If Arrdata(j + 1) <> "" Then
                            data_stream(5) = Arrdata(j + 1)
                            Else
                            data_stream(5) = "99999"
                            End If
                        Case Is = "39"
                            If Arrdata(j + 1) <> "" Then
                            data_stream(6) = Arrdata(j + 1)
                            Else
                            data_stream(6) = "99999"
                            End If
                        Case Is = "40"
                            If Arrdata(j + 1) <> "" Then
                            data_stream(7) = Arrdata(j + 1)
                            Else
                            data_stream(7) = "99999"
                            End If
                    End Select
                    j = j + 1
                Next j
                
                For k = 0 To 7
                    If data_stream(k) = "" Then
                        data_stream(k) = "99999"
                    End If
                Next k
                
                sqlstr = "select log_Time AS Tm from " & stationID & " where ((log_Date=#" & Arocon & "#) and (log_Time=#" & data_stream(1) & "#))"
                MsgBox sqlstr
                Conn.Execute sqlstr
                
                If Rs.EOF Then
                    sqlstr = "insert into " & stationID & "(log_Date,log_Time,Hcon,State,Load,Allweight,Mfiux,FFiux) values ('" & data_stream(0) & "','" & data_stream(1) & "','" & data_stream(2) & "','" & data_stream(3) & "','" & data_stream(4) & "','" & data_stream(5) & "','" & data_stream(6) & "','" & data_stream(7) & "')"
                    Conn.Execute sqlstr
                End If
                Set Rs = Nothing
                Rs.Close
            End If
        Next i
        counter = Timer + time1
        Do Until counter <= Timer
            DoEvents
        LoopEnd Function上边就是函数的全部代码。
      

  10.   

    问题是当access数据库为空时候,执行程序,我在第一个conn.Execute sqlstr后面加了一个msgbox rs.eof,输出为true。这样后面的if rs.eof then 中的sqlstr="insert ..."被conn.execute执行。但是当我第二次运行程序时候,也就是Access数据库中存在了上一次插入的数据后,第一个conn.execute sqlstr就不执行了,从而也就没办法判断后面的if rs.eof 了。
      

  11.   

    Conn.Execute sqlstr 这个换成 Set Rs=Conn.Execute sqlstr
      

  12.   

    你看  你执行判断了 但是你没有给Rs装载记录啊 你的Con.exec根本就没有起到作用 更改再看看
      

  13.   

    楼上已经说的很清楚了
    Conn.Execute sqlstr 换成 Set Rs=Conn.Execute(sqlstr)  !!!
      

  14.   

    sqlstr = "select log_Time AS Tm from " & stationID & " where ((log_Date=#" & Arocon & "#) and (log_Time=#" & data_stream(1) & "#))"-----查询语句,判断Access数据库中是否有符合条件的记录rs = Conn.Execute (sqlstr)----执行1
                
    If Rs.EOF Thensqlstr = "insert into " & stationID & "(log_Date,log_Time,Hcon,State,Load,Allweight,Mfiux,FFiux) values ('" & data_stream(0) & "','" & data_stream(1) & "','" & data_stream(2) & "','" & data_stream(3) & "','" & data_stream(4) & "','" & data_stream(5) & "','" & data_stream(6) & "','" & data_stream(7) & "')"-----插入语句,如果Access数据库中没有符合条件的记录则插入Conn.Execute sqlstr----执行1End If
      

  15.   

    try:dim i as integer          '声明一个整形变量sqlstr="select ..."
    conn.Execute sqlstr,i     '----执行一if i=0 then
        sqlstr="insert ..."
        conn.Execute sqlstr   '----执行二
    end if