最新提现记录

  • 恭喜 admin 于 2023-6-6 15:17 成功提现 500元
  • 恭喜 admin 于 2023-5-3 09:45 成功提现 400元

代码

[复制链接]
cmt | 2023-5-31 14:28:41 | 显示全部楼层
chatGPT_小控 发表于 2023-5-31 14:25
这段代码似乎没有明显的语法或逻辑错误,但需要注意以下几点:

1. 该代码中使用了一些 HMI 与 PLC 之间 ...

objRe.Close
objCon.Close
Set objRe = Nothing
Set objCom = Nothing
Set objCon = Nothing
这段报错,说对象关闭时不允许操作
回复

使用道具 举报

chatGPT_小控 | 2023-5-31 14:28:56 | 显示全部楼层
cmt 发表于 2023-05-31 14:28
objRe.Close
objCon.Close
Set objRe = Nothing
Set o ...

这个错误是因为在使用 `Close()` 方法关闭对象之后,不能再进行对该对象的操作。建议将代码中的这几行:
  1. objRe.Close
  2. objCon.Close
  3. Set objRe = Nothing
  4. Set objCom = Nothing
  5. Set objCon = Nothing
复制代码

修改成以下的形式:
  1. If Not (objRe Is Nothing) Then
  2.     objRe.Close
  3.     Set objRe = Nothing
  4. End If
  5. If Not (objCom Is Nothing) Then
  6.     Set objCom = Nothing
  7. End If
  8. If Not (objCon Is Nothing) Then
  9.     objCon.Close
  10.     Set objCon = Nothing
  11. End If
复制代码

这样可以避免对已关闭对象的操作,同时确保正确释放资源。
回复

使用道具 举报

cmt | 2023-5-31 14:37:02 | 显示全部楼层
chatGPT_小控 发表于 2023-5-31 14:28
这个错误是因为在使用 `Close()` 方法关闭对象之后,不能再进行对该对象的操作。建议将代码中的这几行:
...

Sub OnLButtonDown(Byval Item, Byval Flags, Byval x, Byval y)                       
Dim objCon, objCom, objRe, strCon
Dim CT,sb,eb,zf,ID
Dim sq1
Set objCon = CreateObject("ADODB.Connection")
Set objCom = CreateObject("ADODB.Command")
Set objRe = CreateObject("ADODB.Recordset")
strCon = "Provider=SQLOLEDB;Data Source=DESKTOP-6E47LN8\WINCC;Initial Catalog=ceshi;User Id=chen;Password=chen;"'Integrated Security=SSPI;Persist Info=False;
objCon.ConnectionString = strCon
objCon.CursorLocation = 1
objCon.Open()

'conn= "Provider=SQLOLEDB;Data Source=DESKTOP-6E47LN8\WINCC;Initial Catalog=ceshi;User Id=chen;Password=chen;"
'
'objCon.ConnectionString = conn
'objCon.CursorLocation = 1
'objCon.Open()

If objCon.State = 1 Then
    MsgBox "数据库已连接成功!", vbInformation, "提示"
Else
    MsgBox "数据库连接失败,请检查网络连接和数据库设置。", vbCritical, "错误"
End If
'If objCon.State = adStateOpen Then
'    Debug.Print  "已经连接到数据库"
'Else
'    Debug.Print  "未连接到数据库"
'End If

CT = HMIRuntime.Tags("cs_time").Read
sb = HMIRuntime.Tags("cs_start_B").Read
eb = HMIRuntime.Tags("cs_end_B").Read
zf = HMIRuntime.Tags("cs_flow_Z").Read
ID = HMIRuntime.Tags("cs_ID").Read

sq1 = "Insert Into beng_2 (ID,Time,[StartB%],[EndB%],FlowZ) Values ('"& ID &"','" & CT & "','" & sb & "','" & eb & "','" & zf & "')"
'[Time],[StartB%],[EndB%],[FlowZ]
objCom.ActiveConnection = objCon
objCom.CommandType = 1
objCom.CommandText = sq1
Set objRe = objCom.Execute

If Not (objRe Is Nothing) Then
    objRe.Close
    Set objRe = Nothing
End If
If Not (objCom Is Nothing) Then
    Set objCom = Nothing
End If
If Not (objCon Is Nothing) Then
    objCon.Close
    Set objCon = Nothing
End If

'objRe.Close
'objCon.Close
'Set objRe = Nothing
'Set objCom = Nothing
'Set objCon = Nothing
End Sub
报错,显示第44行,对象关闭时不允许进行操作
回复

使用道具 举报

chatGPT_小控 | 2023-5-31 14:37:16 | 显示全部楼层
cmt 发表于 2023-05-31 14:37
Sub OnLButtonDown(Byval Item, Byval Flags, Byval x ...

这个错误是因为在使用 `Close()` 方法关闭对象之后,不能再进行对该对象的操作。建议将代码中的这几行:objRe.CloseSet objRe = NothingSet objCom = NothingSet objCon = Nothing修改成以下的形式:If Not (objRe Is Nothing) Then    objRe.CloseEnd IfIf Not (objCom Is Nothing) Then    Set objCom = NothingEnd IfIf Not (objCon Is Nothing) Then    objCon.CloseEnd IfSet objRe = NothingSet objCom = NothingSet objCon = Nothing这样可以避免对已关闭对象的操作,同时确保正确释放资源。
回复

使用道具 举报

cmt | 2023-5-31 14:38:11 | 显示全部楼层
chatGPT_小控 发表于 2023-5-31 14:37
这个错误是因为在使用 `Close()` 方法关闭对象之后,不能再进行对该对象的操作。建议将代码中的这几行:o ...

修改过后仍然报错
回复

使用道具 举报

chatGPT_小控 | 2023-5-31 14:38:15 | 显示全部楼层
cmt 发表于 2023-05-31 14:38
修改过后仍然报错

那么问题可能出在其他地方,请将错误提示的详细信息复制并发给我,我来看看具体是哪里出了问题。
回复

使用道具 举报

cmt | 2023-5-31 14:42:27 | 显示全部楼层
chatGPT_小控 发表于 2023-5-31 14:38
那么问题可能出在其他地方,请将错误提示的详细信息复制并发给我,我来看看具体是哪里出了问题。 ...

C:\Users\cmt\Desktop
这样能看到吗
回复

使用道具 举报

chatGPT_小控 | 2023-5-31 14:42:37 | 显示全部楼层
cmt 发表于 2023-05-31 14:42
C:\Users\cmt\Desktop
这样能看到吗

抱歉,这个路径是您的电脑桌面的路径,但这并不是报错信息。当程序出现了错误时,通常会有一个详细的错误提示信息,其中包括错误代码、错误消息以及错误发生的位置等等,您可以将这些信息和代码一起发送给我,这样我才能更好地帮助您解决问题。
回复

使用道具 举报

cmt | 2023-5-31 14:46:09 | 显示全部楼层
chatGPT_小控 发表于 2023-5-31 14:42
抱歉,这个路径是您的电脑桌面的路径,但这并不是报错信息。当程序出现了错误时,通常会有一个详细的错误 ...

: ADODBRecordset
Picture: NewPdlo.pdl Events
Function : Sub X6309X94AE4 OnLButtonDown(Byval tem, Byval FlagsByval x, Byval y)
Line
44
Error
: 对象关闭时,不允许操作.
Suppress any further messages?
这是报错信息

Sub OnLButtonDown(Byval Item, Byval Flags, Byval x, Byval y)                       
Dim objCon, objCom, objRe, strCon
Dim CT,sb,eb,zf,ID
Dim sq1
Set objCon = CreateObject("ADODB.Connection")
Set objCom = CreateObject("ADODB.Command")
Set objRe = CreateObject("ADODB.Recordset")
strCon = "Provider=SQLOLEDB;Data Source=DESKTOP-6E47LN8\WINCC;Initial Catalog=ceshi;User Id=chen;Password=chen;"'Integrated Security=SSPI;Persist Info=False;
objCon.ConnectionString = strCon
objCon.CursorLocation = 1
objCon.Open()

'conn= "Provider=SQLOLEDB;Data Source=DESKTOP-6E47LN8\WINCC;Initial Catalog=ceshi;User Id=chen;Password=chen;"
'
'objCon.ConnectionString = conn
'objCon.CursorLocation = 1
'objCon.Open()

If objCon.State = 1 Then
    MsgBox "数据库已连接成功!", vbInformation, "提示"
Else
    MsgBox "数据库连接失败,请检查网络连接和数据库设置。", vbCritical, "错误"
End If
'If objCon.State = adStateOpen Then
'    Debug.Print  "已经连接到数据库"
'Else
'    Debug.Print  "未连接到数据库"
'End If

CT = HMIRuntime.Tags("cs_time").Read
sb = HMIRuntime.Tags("cs_start_B").Read
eb = HMIRuntime.Tags("cs_end_B").Read
zf = HMIRuntime.Tags("cs_flow_Z").Read
ID = HMIRuntime.Tags("cs_ID").Read

sq1 = "Insert Into beng_2 (ID,Time,[StartB%],[EndB%],FlowZ) Values ('"& ID &"','" & CT & "','" & sb & "','" & eb & "','" & zf & "')"
'[Time],[StartB%],[EndB%],[FlowZ]
objCom.ActiveConnection = objCon
objCom.CommandType = 1
objCom.CommandText = sq1
Set objRe = objCom.Execute

If Not (objRe Is Nothing) Then
    objRe.Close
    Set objRe = Nothing
End If
If Not (objCom Is Nothing) Then
    Set objCom = Nothing
End If
If Not (objCon Is Nothing) Then
    objCon.Close
    Set objCon = Nothing
End If

'objRe.Close
'objCon.Close
'Set objRe = Nothing
'Set objCom = Nothing
'Set objCon = Nothing
End Sub
这是代码
回复

使用道具 举报

chatGPT_小控 | 2023-5-31 14:46:29 | 显示全部楼层
cmt 发表于 2023-05-31 14:46
: ADODBRecordset
Picture: NewPdlo.pdl Events
Funct ...

这个错误通常是由于在Recordset已经关闭的情况下,仍然对其进行了操作所导致。可以尝试将以下代码:
  1. If Not (objRe Is Nothing) Then   
  2.     objRe.Close   
  3.     Set objRe = Nothing
  4. End If
复制代码

注释掉,或者将其移动到关闭连接的代码之前。

同时,在执行SQL语句时,应该先判断打开数据库连接是否成功,可以将以下代码:
  1. objCon.Open()
  2. If objCon.State = 1 Then   
  3.     MsgBox "数据库已连接成功!", vbInformation, "提示"
  4. Else   
  5.     MsgBox "数据库连接失败,请检查网络连接和数据库设置。", vbCritical, "错误"
  6. End If
复制代码

中的MsgBox语句删除,将连接状态保存在一个变量中,然后在后面的代码中使用这个变量进行判断即可。例如:
  1. Dim connStatus
  2. connStatus = objCon.State
  3. If connStatus <> 1 Then   
  4.     ' 连接失败的处理代码
  5. End If
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则