在VB6中用 Select 语句检索记录
                  作者:unknown 更新时间: 2005-05-02   
                   
                          本文向你介绍如何不用借助Access,直接在程序中创建一个数据库,然后从标准的ASCII文本文件中读取数据到数据库中。原文是微软知识库中的一篇文章,但当时是针对VB3写的,所以其中的代码有点过时。例如现在DAO中已没有Table对象,代之以Recordset对象。下面是修改后的代码,在VB6中调试通过。 
                          首先在工程中添加对Microsoft DAO 3.51 Library引用。 
                          在窗体中添加三个命令按钮和两个MSFlexGrid. 
                          按照下表设置和控件的属性: 
                          控件 属性 值 
                          Command1 Caption "建立文本文件并显示在网格中" 
                          Command2 Caption "传输入数据并新建一个数据库" 
                          Command3 Caption "显示新数据库中的数据" 
                          Grid1 Cols 5 
                          Grid1 Rows 35 
                          Grid2 Cols 5 
                          Grid2 Rows 35 
                          将下面的代码添加到窗体的声明部分 
                          Dim nums(30) As Long 
                          Dim names(30) As String * 20 
                          Dim addresses(30) As String * 25 
                          Dim ss_nums(30) As String * 12 
                          Const DB_LONG = 4 
                          Const DB_TEXT = 10 
                          Const DB_LANG_GENERAL = 
                        ";LANGID=0x0809;CP=1252;COUNTRY=0" 
                          将下面的代码添加到窗体的Load事件中 
                          Sub Form_Load () 
                          Show 
                          grid1.ColWidth(1) = 1000 'For Emp ID 
                          grid1.ColWidth(2) = 2000 'For Emp Name 
                          grid1.ColWidth(3) = 3000 'For Emp Addr 
                          grid1.ColWidth(4) = 2000 'For Emp SSN 
                          grid1.Col = 1 
                          grid1.Row = 0 
                          grid1.Text = "Emp ID" 'Header for Emp ID from text 
                        file 
                          grid1.Col = 2 
                          grid1.Row = 0 
                          grid1.Text = "Emp Name" 'Header for Emp Name from text 
                        file 
                          grid1.Col = 3 
                          grid1.Row = 0 
                          grid1.Text = "Emp Addr" 'Header for Emp Addr from text 
                        file 
                          grid1.Col = 4 
                          grid1.Row = 0 
                          grid1.Text = "Emp SSN" 'Header for Emp SSN from text 
                        file 
                          grid2.ColWidth(1) = 1000 'For Emp ID 
                          grid2.ColWidth(2) = 2000 'For Emp Name 
                          grid2.ColWidth(3) = 3000 'For Emp Addr 
                          grid2.ColWidth(4) = 2000 'For Emp SSN 
                          grid2.Col = 1 
                          grid2.Row = 0 
                          grid2.Text = "Employee ID" 'Header for Emp ID from DB 
                          grid2.Col = 2 
                          grid2.Row = 0 
                          grid2.Text = "Employee Name" 'Header for Emp Name from 
                        DB 
                          grid2.Col = 3 
                          grid2.Row = 0 
                          grid2.Text = "Employee Addr" 'Header for Emp ID from 
                        DB 
                          grid2.Col = 4 
                          grid2.Row = 0 
                          grid2.Text = "Employee SSN" 'Header for Emp Name from 
                        DB 
                          End Sub 
                          在Command1_Click事件中加入下面的代码 
                          Sub Command1_Click () 
                          For i% = 1 To 30 
                          nums(i%) = i% 
                          names(i%) = "John Doe # " + Str$(i%) 
                          addresses(i%) = Str$(i%) + " Mocking Bird Lane" 
                          If i% < 9 Then 
                          '* Enter the following four lines as one, single line: 
                          ss_nums(i%) = Trim$(Str$(i%) + Trim$(Str$(i%))+ 
                        Trim$(Str$(i%)) + "-" + Trim$(Str$(i% + 1))+ 
                        Trim$(Str$(i% + 1)) + "-" + Trim$(Str$(i%)) 
                          + Trim$(Str$(i%)) + Trim$(Str$(i%)) + Trim$(Str$(i%))) 
                          Else 
                          '* Enter the following two lines as one, single line: 
                          ss_nums(i%) = Trim$(Trim$(Str$(999)) + "-" + 
                        Trim$(Str$(88))+ "-" + Trim$(Str$(7777))) 
                          End If 
                          Next i% 
                          Open "Testdata.DAT" For Output As #1 
                          For j% = 1 To 30 
                          Print #1, nums(j%) 
                          Print #1, names(j%) 
                          Print #1, addresses(j%) 
                          Print #1, ss_nums(j%) 
                          Next j% 
                          Close #1 
                          For i% = 1 To 30 'Display results from text file 
                          grid1.Col = 1 
                          grid1.Row = i% 
                          grid1.Text = nums(i%) 'Load Emp IDs 
                          grid1.Col = 2 
                          grid1.Row = i% 
                          grid1.Text = names(i%) 'Load Emp Names 
                          grid1.Col = 3 
                          grid1.Row = i% 
                          grid1.Text = addresses(i%) 'Load Emp Addrs 
                          grid1.Col = 4 
                          grid1.Row = i% 
                          grid1.Text = ss_nums(i%) 'Load Emp SSNs 
                          Next i% 
                          End Sub 
                          在Command2_Click事件中加入下面的代码 
                          Sub Command2_Click () 
                          Dim newdb As Database 
                          Dim newtb As Recordset 
                          Dim newtd As New tabledef 
                          Dim newidx As New Index 
                          Dim field1 As New field 'For Emp nums 
                          Dim field2 As New field 'For Emp names 
                          Dim field3 As New field 'For Emp addresses 
                          Dim field4 As New field 'For Emp ss_nums 
                          screen.MousePointer = 11 'Display the time to build 
                           
                          Set newdb = CreateDatabase("NEWDB.MDB", 
                        DB_LANG_GENERAL) 
                           
                          newtd.Name = "Emp_Table" '* New table name 
                          field1.Name = "Emp_ID" '* Holds Employee ID nums() 
                          field1.Type = DB_LONG 
                          newtd.Fields.Append field1 
                          field2.Name = "Emp_Name" '* Holds Emp names() 
                          field2.Type = DB_TEXT 
                          field2.Size = 20 
                          newtd.Fields.Append field2 
                          field3.Name = "Emp_Addr" '* Holds Employee addr() 
                          field3.Type = DB_TEXT 
                          field3.Size = 25 
                          newtd.Fields.Append field3 
                          field4.Name = "Emp_SSN" '* Holds emp ss_nums() 
                          field4.Type = DB_TEXT 
                          field4.Size = 12 
                          newtd.Fields.Append field4 
                          newidx.Name = "Emp_ID_IDX" '* You have to have an 
                        index 
                          newidx.Fields = "Emp_ID" 
                          newidx.Primary = True 
                          newtd.Indexes.Append newidx 
                          newdb.TableDefs.Append newtd 
                          Set newtb = newdb.OpenRecordset("Emp_Table") 
                          Open "Testdata.dat" For Input As #1 
                          BeginTrans 
                          Do While Not (EOF(1)) 
                          newtb.AddNew 
                          Line Input #1, tmp1$ 'Retrieve empl_id 
                          Line Input #1, tmp2$ 'Retrieve empl_name 
                          Line Input #1, tmp3$ 'Retrieve empl_addr 
                          Line Input #1, tmp4$ 
                          newtb("Emp_ID") = Trim$(tmp1$) 'Place in field1 
                          newtb("Emp_Name") = Trim$(tmp2$) 'Place in field2 
                          newtb("Emp_Addr") = Trim$(tmp3$) 'Place in field3 
                          newtb("Emp_SSN") = Trim$(tmp4$) 'Place in field4 
                          newtb.Update 'Save to table 
                          Loop 
                          CommitTrans 
                          Close #1 'Close text file 
                          newtb.Close 'Close DB's table 
                          newdb.Close 'Close DB 
                          screen.MousePointer = 0 'Set back to show done 
                          End Sub 
                          在Command3_Click事件中加入下面的代码 
                          Sub Command3_Click () 
                          Dim db As Database 
                          Dim t As Recordset 
                          Dim counter% 
                          Set db = OpenDatabase("NEWDB.MDB") 
                          Set t = db.OpenRecordset("Emp_Table") 
                          counter% = 1 'Start counter at Row=1 
                          Do Until t.EOF 
                          grid2.Col = 1 
                          grid2.Row = counter% 
                          grid2.Text = t(0) 'Load Emp ID 
                          grid2.Col = 2 
                          grid2.Row = counter% 
                          grid2.Text = t(1) 'Load Emp Name 
                          grid2.Col = 3 
                          grid2.Row = counter% 
                          grid2.Text = t(2) 'Load Emp Addr 
                          grid2.Col = 4 
                          grid2.Row = counter% 
                          grid2.Text = t(3) 'Load Emp SSN 
                          counter% = counter% + 1 
                          t.MoveNext 
                          Loop 
                          t.Close 
                          db.Close 
                          End Sub

评论