如何在组合框中显示文本但引用id字段?

时间:2013-01-02 06:41:44

标签: oracle vb6

我编写了插入和更新表student_record_database的代码,其中包含许多其他表的外键。

在运行此代码时,它不接受从组合框中选择的文本数据并提供错误无效的数字,完整性约束,并且DTpicker也不接受给定的日期,尽管我已设置自定义格式。

下面是我的代码。我在组合框中显示文本时遇到问题。

<code>
Private Sub save_Click()
If Val(COMBO4) = 0 Then
SQL = "INSERT INTO    STUDENT_RECORD_DATABASE(ROLLNO,FIRST_NAME,MIDDLE_NAME,LAST_NAME,CONTACT,CONTACT1,CONTACT2,ADDRESS,GRADE,DIVID,BLOOD_GROUP,HID,DATE_OF_BIRTH,TRANSPORT,SNAME,MEAL,BUSNO,RUTNO,DID,AID,CARD_TYPE,CARD_NO)"

  SQL = SQL + "VALUES(" & Val(COMBO4) & ",'" & Trim(Text2) & "', '" & Trim(Text3) & "', '" & Trim(Text4) & "', " & Val(Text5) & ", " & Val(Text6) & ", " & Val(Text7) & ", '" & Trim(Text8) & "', '" & Trim(Combo1) & "','" & Val(Combo2) & "',"
SQL = SQL + " '" & Trim(Combo3) & "' ,'" & Val(Combo9) & "','" & DTPicker1.Value & "',"
SQL = SQL + " '" & Trim(Combo10) & "' ,'" & Combo5.Text & "' ,'" & Trim(Combo11) & "' ,'" & Combo6.Text & "' ,'" & Val(Combo12) & "' ,'" & Val(Combo7) & "','" & Val(Combo8) & "',"

 SQL = SQL + " '" & Trim(Combo13) & "' ," & Text11.Text & " ) "

  Set RES = CON.Execute(SQL)
MsgBox ("RECORD INSERTED")
Else
SQL = "UPDATE STUDENT_RECORD_DATABASE SET "
SQL = SQL + "ROLLNO= " & Val(COMBO4) & ","
SQL = SQL + "FIRST_NAME= '" & Trim(Text2) & "',"
SQL = SQL + "MIDDLE_NAME= '" & Trim(Text3) & "',"
SQL = SQL + "LAST_NAME= '" & Trim(Text4) & "',"
SQL = SQL + "CONTACT=" & Val(Text5) & ","
SQL = SQL + "CONTACT1=" & Val(Text6) & ","
SQL = SQL + "CONTACT2=" & Val(Text7) & ","
SQL = SQL + "ADDRESS= '" & Trim(Text8) & "',"
SQL = SQL + "GRADE='" & Trim(Combo1) & "',"
SQL = SQL + "DIVID='" & Val(Combo2) & "',"
SQL = SQL + "BLOOD_GROUP='" & Trim(Combo3) & "',"
SQL = SQL + "HID='" & Val(Combo9) & "',"
SQL = SQL + "DATE_OF_BIRTH=(' " & DateValue(DTPicker1.Value) & " ' ),"
SQL = SQL + "TRANSPORT='" & Trim(Combo10) & "',"
SQL = SQL + "SNAME='" & Trim(Combo5) & "',"
SQL = SQL + "MEAL='" & Trim(Combo11) & "',"
SQL = SQL + "BUSNO='" & Trim(Combo6) & "',"
SQL = SQL + "RUTNO=" & Val(Combo12) & ","
SQL = SQL + "DID='" & Val(Combo7) & "',"
SQL = SQL + "AID='" & Val(Combo8) & "',"
SQL = SQL + "CARD_TYPE='" & Trim(Combo13) & "',"
SQL = SQL + "CARD_NO=" & Val(Text11) & ""
SQL = SQL + "WHERE ROLLNO= " & Val(COMBO4) & ""
MsgBox ("RECORD UPDATED")
End If
End Sub
</code>
Error occurred is invalid month,integrity constraint-parent key not found,invalid  number. 

2 个答案:

答案 0 :(得分:1)

有点难以回答你的问题,不知道STUDENT_RECORD_DATABASE的结构以及你正在更新的内容,但有些事情你可以看一下。

首先,当像这样在Oracle中插入日期时,您应该在日期列上使用TO_DATE()函数。即DATE_OF_BIRTH

接下来确保更新满足所有外键表键约束。

如果它是您的主键,则无需更新ROLLNO

最后确保您尝试更新的数据都不会大于字符串(例如VARCHAR2)列的大小。此外,其中一些肯定是字符串列,它们不受引号限制。例如。 CONTACT CONTACT1 CONTACT2CARD_NO

答案 1 :(得分:0)

您需要使用组合框.ItemData属性来存储您的值的ID字段:

Do While Not myRecordset.EOF
   myCombo.AddItem myRecordset("MyFieldString").Value
   myCombo.ItemData(myCombo.NewIndex) = myRecordset("MyFieldID").Value
   myRecordset.MoveNext
Loop

引用所选组合值的.ItemData属性:

"CARD_TYPE='" & Trim(Combo13.ItemData(Combo13.ListIndex)) & "',"

至于您的数据格式问题,不确定Oracle,但对于SQL Server,您必须格式化日期值:

"DATE_OF_BIRTH=(' " & Format$(DTPicker1.Value, "yyyy-mm-dd") & " ' ),"