TEXT.FRM
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:16k
源码类别:

Windows编程

开发平台:

Visual C++

  1. VERSION 2.00
  2. Begin Form PrimaryWindow 
  3.    BackColor       =   &H00C0C0C0&
  4.    BorderStyle     =   1  'Fixed Single
  5.    Caption         =   "Text"
  6.    ControlBox      =   0   'False
  7.    ForeColor       =   &H00000000&
  8.    Height          =   6585
  9.    Icon            =   TEXT.FRX:0000
  10.    Left            =   630
  11.    LinkMode        =   1  'Source
  12.    LinkTopic       =   "Form1"
  13.    MaxButton       =   0   'False
  14.    ScaleHeight     =   5895
  15.    ScaleWidth      =   7815
  16.    Top             =   75
  17.    Width           =   7935
  18.    Begin TextBox Text_Edit 
  19.       BackColor       =   &H00FFFFFF&
  20.       ForeColor       =   &H00000000&
  21.       Height          =   2775
  22.       Left            =   120
  23.       MultiLine       =   -1  'True
  24.       ScrollBars      =   3  'Both
  25.       TabIndex        =   0
  26.       Top             =   2760
  27.       Width           =   7575
  28.    End
  29.    Begin VBSQL VBSQL1 
  30.       Caption         =   "SQL Err/Msg"
  31.       Height          =   272
  32.       Left            =   5580
  33.       Top             =   2430
  34.       Visible         =   0   'False
  35.       Width           =   2055
  36.    End
  37.    Begin ListBox Titles_List 
  38.       Height          =   810
  39.       Left            =   135
  40.       TabIndex        =   9
  41.       Top             =   1410
  42.       Width           =   2415
  43.    End
  44.    Begin DirListBox Dir_Tree_Combo 
  45.       Height          =   1275
  46.       Left            =   3360
  47.       TabIndex        =   5
  48.       Top             =   1155
  49.       Width           =   2055
  50.    End
  51.    Begin FileListBox Text_File_List 
  52.       Height          =   1590
  53.       Left            =   5580
  54.       Pattern         =   "*.txt"
  55.       TabIndex        =   6
  56.       Top             =   840
  57.       Width           =   2055
  58.    End
  59.    Begin DriveListBox Drive_Combo 
  60.       Height          =   357
  61.       Left            =   3360
  62.       TabIndex        =   4
  63.       Top             =   833
  64.       Width           =   2048
  65.    End
  66.    Begin ListBox Database_List 
  67.       Height          =   420
  68.       Left            =   135
  69.       TabIndex        =   11
  70.       Top             =   360
  71.       Width           =   2415
  72.    End
  73.    Begin TextBox Title_Edit 
  74.       Height          =   323
  75.       Left            =   4605
  76.       TabIndex        =   2
  77.       Top             =   75
  78.       Width           =   3075
  79.    End
  80.    Begin Label Label5 
  81.       BackColor       =   &H00C0C0C0&
  82.       Caption         =   "Text in database:"
  83.       Height          =   225
  84.       Left            =   120
  85.       TabIndex        =   12
  86.       Top             =   2520
  87.       Width           =   2055
  88.    End
  89.    Begin Label Label4 
  90.       BackColor       =   &H00C0C0C0&
  91.       Caption         =   "Titles in database:"
  92.       Height          =   225
  93.       Left            =   120
  94.       TabIndex        =   10
  95.       Top             =   1185
  96.       Width           =   2055
  97.    End
  98.    Begin Label Text_File_Label 
  99.       BackColor       =   &H00C0C0C0&
  100.       Caption         =   "(none)"
  101.       Height          =   255
  102.       Left            =   3855
  103.       TabIndex        =   8
  104.       Top             =   480
  105.       Width           =   3870
  106.    End
  107.    Begin Label Label3 
  108.       BackColor       =   &H00C0C0C0&
  109.       Caption         =   "File:"
  110.       Height          =   255
  111.       Left            =   3360
  112.       TabIndex        =   7
  113.       Top             =   480
  114.       Width           =   375
  115.    End
  116.    Begin Label Label2 
  117.       BackColor       =   &H00C0C0C0&
  118.       Caption         =   "Text file title:"
  119.       ForeColor       =   &H00000000&
  120.       Height          =   255
  121.       Left            =   3360
  122.       TabIndex        =   3
  123.       Top             =   120
  124.       Width           =   1245
  125.    End
  126.    Begin Label Label1 
  127.       BackColor       =   &H00C0C0C0&
  128.       Caption         =   "Databases:"
  129.       Height          =   210
  130.       Left            =   120
  131.       TabIndex        =   1
  132.       Top             =   120
  133.       Width           =   1005
  134.    End
  135.    Begin Menu Menu_File 
  136.       Caption         =   "&File"
  137.       Begin Menu Logon_Selection 
  138.          Caption         =   "&Logon"
  139.       End
  140.       Begin Menu Log_Off_Selection 
  141.          Caption         =   "Log &Off"
  142.       End
  143.       Begin Menu Exit_Selection 
  144.          Caption         =   "&Exit"
  145.       End
  146.    End
  147.    Begin Menu Options_Menu 
  148.       Caption         =   "&Options"
  149.       Begin Menu View_Selection 
  150.          Caption         =   "&View Text"
  151.       End
  152.       Begin Menu Insert_Selection 
  153.          Caption         =   "&Insert Text"
  154.       End
  155.       Begin Menu Delete_Selection 
  156.          Caption         =   "&Delete Text"
  157.       End
  158.    End
  159.    Begin Menu About_Menu 
  160.       Caption         =   "&About"
  161.    End
  162. End
  163. Sub About_Menu_Click ()
  164.     About_Form.Show 1
  165. End Sub
  166. Function CheckForTextTable () As Integer
  167.     Rem Check to see if sample table exits
  168.     Cmd$ = "Select count(*) from sysobjects where name = 'text_table'"
  169.     Results% = SqlCmd(SqlConn%, Cmd$)
  170.     Results% = SqlExec(SqlConn%)
  171.     Do While (SqlResults%(SqlConn%) <> NOMORERESULTS)
  172. Do While (SqlNextRow(SqlConn%) <> NOMOREROWS)
  173.     Table_Found$ = Sqldata(SqlConn%, 1)
  174. Loop
  175.     Loop
  176.     If Val(Table_Found$) = 0 Then
  177. Results% = MsgBox("Text table not found in " + Database$ + " database." + Chr$(13) + Chr$(10) + "Do you wish to create the table?", 52)
  178. If Results% = 7 Then
  179.     CheckForTextTable = FAIL
  180.     Exit Function
  181. Else
  182.     Rem If sample table does not exist, create it
  183.     Cmd$ = "create table text_table (title varchar(30) not null, text_col text null)"
  184.     Results% = SqlCmd(SqlConn%, Cmd$)
  185.     Results% = SqlExec(SqlConn%)
  186.     Do While (SqlResults%(SqlConn%) <> NOMORERESULTS)
  187. Do While (SqlNextRow(SqlConn%) <> NOMOREROWS)
  188. Loop
  189.     Loop
  190.     CheckForTextTable = SUCCEED
  191. End If
  192.     Else
  193. CheckForTextTable = SUCCEED
  194.     End If
  195. End Function
  196. Sub ClearTextTitles ()
  197. Rem Clear all text titles out of list box
  198. Do While Titles_List.ListCount
  199.     Titles_List.RemoveItem 0
  200. Loop
  201. End Sub
  202. Sub Database_List_Click ()
  203. Rem
  204. Rem Get the database user wants to open
  205. Rem If it doesn't have the text table in it, see if user wants to create one
  206. Rem If it does exist, get all the text titles
  207. Rem
  208.    
  209.     DatabaseSelection$ = Database_list.Text
  210.     Results% = SqlUse(SqlConn%, DatabaseSelection$)
  211.     Results% = CheckForTextTable()
  212.     If Results% = SUCCEED Then
  213. PrimaryWindow.MousePointer = 11
  214. RetrieveTextTitles
  215. View_Selection.Enabled = True
  216. Insert_Selection.Enabled = True
  217. Delete_Selection.Enabled = True
  218. PrimaryWindow.MousePointer = 0
  219.     Else
  220. ClearTextTitles
  221. View_Selection.Enabled = False
  222. Insert_Selection.Enabled = False
  223. Delete_Selection.Enabled = False
  224.     End If
  225. Rem
  226. Rem Display the current database in the title window
  227. Rem clear the text field
  228. Rem
  229.     DatabaseName$ = SqlName(SqlConn%)
  230.     ChangePrimaryWindowCaption
  231.     Text_Edit.Text = ""
  232. End Sub
  233. Sub Delete_Selection_Click ()
  234.     Text_Title$ = Titles_List.Text
  235.     If Text_Title$ = "" Then
  236. Beep
  237. MsgBox "You must first select a title."
  238.     Else
  239. Response% = MsgBox("Delete " + Text_Title$ + "?", 49)
  240. If Response% = 1 Then
  241.     PrimaryWindow.MousePointer = 11
  242.     Results% = ExecuteSQLCommand("Delete from text_table where title = '" + Text_Title$ + "'")
  243.     Results% = SqlResults%(SqlConn%)
  244.     Do While (SqlNextRow(SqlConn%) <> NOMOREROWS)
  245.     Loop
  246.     PrimaryWindow.Text_Edit.Text = ""
  247.     RetrieveTextTitles
  248.     PrimaryWindow.MousePointer = 0
  249. Else
  250.     MsgBox "Delete aborted."
  251. End If
  252.     End If
  253. End Sub
  254. Sub Dir_Tree_Combo_Change ()
  255.     Text_File_Label.Caption = "(none)"
  256.     Text_File_List.Path = Dir_Tree_Combo.Path
  257. End Sub
  258. Sub Drive_Combo_Change ()
  259.     Text_File_Label.Caption = "(none)"
  260.     Dir_Tree_Combo.Path = Drive_Combo.Drive
  261. End Sub
  262. Sub Exit_Selection_Click ()
  263.     ExitApplication
  264.     End
  265. End Sub
  266. Sub Form_Load ()
  267.     PrimaryWindowTitle = "Text Example"
  268.     ChangePrimaryWindowCaption
  269.     InitializeApplication
  270.     MsgBox DBLIB_VERSION$
  271.     Logon_Selection.Enabled = True
  272.     Log_Off_Selection.Enabled = False
  273.     Exit_Selection.Enabled = True
  274.     View_Selection.Enabled = False
  275.     Insert_Selection.Enabled = False
  276.     Delete_Selection.Enabled = False
  277. End Sub
  278. Sub Insert_Selection_Click ()
  279.     Text_File$ = Text_File_Label.Caption
  280.     Title$ = Title_Edit.Text
  281.     Title$ = PrepareString(Title$)
  282.     If Text_File$ = "(none)" Then
  283. Beep
  284. MsgBox "Please select a text file to insert."
  285.     ElseIf Title$ = "" Then
  286. Beep
  287. MsgBox "Please enter a title for the text file you wish to insert."
  288.     Else
  289. PrimaryWindow.MousePointer = 11
  290. InsertText Title$, Text_File$
  291. Title_Edit.Text = ""
  292. Text_File_List.ListIndex = -1
  293. Text_File_Label.Caption = ""
  294. RetrieveTextTitles
  295. PrimaryWindow.MousePointer = 0
  296.     End If
  297. End Sub
  298. Sub InsertText (Title As String, Text_File As String)
  299.     
  300. Rem
  301. Rem This routine will insert the text data into the table
  302. Rem Insert new row with title and token text value
  303. Rem
  304.     Results% = ExecuteSQLCommand("Insert into text_table values ('" + Title + "','none')")
  305.     Do While SqlResults(SqlConn%) <> NOMORERESULTS%
  306. Do While SqlNextRow(SqlConn%) <> NOMOREROWS%
  307. Loop
  308.     Loop
  309. Rem Get identifier for text column in current row
  310.     Results% = ExecuteSQLCommand("select text_col from text_table where title = '" + Title + "'")
  311.     Do While SqlResults(SqlConn%) <> NOMORERESULTS%
  312. Do While SqlNextRow(SqlConn%) <> NOMOREROWS%
  313.     SqlPointer$ = SqlTxPtr(SqlConn%, 1)
  314.     SqlTimestamp$ = SqlTxTimeStamp(SqlConn%, 1)
  315. Loop
  316.     Loop
  317. Rem Open text file to load into SQL Server table
  318.     DataPartLimit& = 8192
  319.     Done% = False
  320.     
  321.     Open Text_File For Input As #1
  322.     FileLength& = LOF(1)
  323.     If FileLength& > 65536 Then
  324. MsgBox "This application cannot display text files greater than 64K."
  325.     Else
  326. FileData$ = ""
  327. Do While Not EOF(1)
  328.     Input #1, DataPart$
  329.     If Right$(DataPart$, 2) <> Chr$(13) + Chr$(10) Then
  330. If Right$(DataPart$, 1) = Chr$(13) Then
  331.     FileData$ = FileData$ + Left$(DataPart$, Len(DataPart$) - 1) + Chr$(13) + Chr$(10)
  332. ElseIf Right$(DataPart$, 1) = Chr$(10) Then
  333.     FileData$ = FileData$ + Left$(DataPart$, Len(DataPart$) - 1) + Chr$(13) + Chr$(10)
  334. Else
  335.     FileData$ = FileData$ + DataPart$ + Chr$(13) + Chr$(10)
  336. End If
  337.     Else
  338. FileData$ = FileData$ + DataPart$
  339.     End If
  340. Loop
  341. Rem Begin inserting text into text column in DatePartLimit& size chunks
  342. Table$ = "text_table.text_col"
  343. DataPos& = 1
  344. DataLen& = Len(FileData$)
  345. If SqlWriteText(SqlConn%, Table$, SqlPointer$, SQLTXPLEN%, SqlTimestamp$, 1, DataLen&, "") <> FAIL% Then
  346.     If SqlOk(SqlConn%) <> FAIL% Then
  347. Results% = SqlResults(SqlConn%)
  348. Do While Not Done%
  349.     If DataPos& + DataPartLimit& - 1 < DataLen& Then
  350. DataPart$ = Mid$(FileData$, DataPos&, DataPartLimit&)
  351. DataPos& = DataPos& + Len(DataPart$)
  352.     Else
  353. DataPart$ = Mid$(FileData$, DataPos&, DataLen& - DataPos& + 1)
  354. Done% = True
  355.     End If
  356. Results% = SqlMoreText%(SqlConn%, Len(DataPart$), DataPart$)
  357. Loop
  358. If SqlOk(SqlConn%) <> FAIL% Then
  359.     If SqlResults(SqlConn%) <> FAIL% Then
  360.     MsgBox "Text inserted."
  361.     End If
  362. End If
  363.     End If
  364. End If
  365.     End If
  366. Close 1
  367. End Sub
  368. Sub LoadText (Title As String)
  369.     
  370. Rem
  371. Rem This routine will read the text field from the table
  372. Rem Clear Text_Edit box on primary window
  373. Rem
  374.     Text_Edit.Text = ""
  375. Rem Get length of text in text column
  376.     Results% = ExecuteSQLCommand("select datalength(text_col) from text_table where title = '" + Title + "'")
  377.     Do While SqlResults(SqlConn%) <> NOMORERESULTS
  378. Do While SqlNextRow(SqlConn%) <> NOMOREROWS
  379.     TextLen& = Val(Sqldata(SqlConn%, 1))
  380. Loop
  381.     Loop
  382.     Offset& = 0
  383. Rem Set size limit on chunks of text data
  384.     LoadSizeLimit& = 8192
  385.     If LoadSizeLimit& > TextLen& Then
  386. LoadSizeLimit& = TextLen&
  387.     End If
  388.     
  389.     LoadSize& = LoadSizeLimit&
  390. Rem Set size of text returned to LoadSizeLimit&
  391.     Results% = ExecuteSQLCommand("set textsize " + Str$(LoadSizeLimit&))
  392.     Do While SqlResults(SqlConn%) <> NOMORERESULTS
  393. Do While SqlNextRow(SqlConn%) <> NOMOREROWS
  394. Loop
  395.     Loop
  396. Rem Begin reading text column in LoadSizeLimit& size chunks
  397.     Cmd$ = "Declare @val varbinary(30)"
  398.     Results% = SqlCmd(SqlConn%, Cmd$)
  399.     Cmd$ = "Select @val = textptr(text_col) from text_table where title = '" + Title + "'"
  400.     Results% = SqlCmd(SqlConn%, Cmd$)
  401.     Done% = False
  402. Do While Not Done%
  403.     Cmd$ = "READTEXT text_table.text_col @val " + Str$(Offset&) + " " + Str$(LoadSize&)
  404.     Results% = SqlCmd(SqlConn%, Cmd$)
  405.     If Offset& + LoadSize& = TextLen& Then
  406. Done% = True
  407.     Else
  408. Offset& = Offset& + LoadSizeLimit&
  409. If Offset& + LoadSizeLimit& > TextLen& Then
  410.     LoadSize& = TextLen& - Offset&
  411. End If
  412.     End If
  413. Loop
  414. Rem Retrieve text data in result rows and place in text_edit box
  415.     
  416.     FileData$ = ""
  417.     If SqlExec(SqlConn%) <> FAIL% Then
  418. Do While SqlResults(SqlConn%) <> NOMORERESULTS
  419.     Do While SqlNextRow(SqlConn%) <> NOMOREROWS
  420. FileData$ = FileData$ + Sqldata(SqlConn%, 1)
  421.     Loop
  422. Loop
  423.     End If
  424. Rem Load text data into edit box on primary window
  425.     Text_Edit.Text = FileData$
  426. End Sub
  427. Sub Log_Off_Selection_Click ()
  428.     Logoff
  429.     Logon_Selection.Enabled = True
  430.     Log_Off_Selection.Enabled = False
  431.     Exit_Selection.Enabled = True
  432.     View_Selection.Enabled = False
  433.     Insert_Selection.Enabled = False
  434.     Delete_Selection.Enabled = False
  435. End Sub
  436. Sub Logon_Selection_Click ()
  437.     Login.Show 1
  438.     PrimaryWindow.MousePointer = 11
  439.     If CheckServerConnection() = 1 Then
  440. Results% = GetDatabases(Database_list)
  441. ChangePrimaryWindowCaption
  442. Logon_Selection.Enabled = False
  443. Log_Off_Selection.Enabled = True
  444.     End If
  445.     PrimaryWindow.MousePointer = 0
  446. End Sub
  447. Function PrepareString (String_In As String) As String
  448. Rem
  449. Rem This routine will double up the single quotation mark to
  450. Rem avoid syntax errors
  451. Rem
  452.     String_Out$ = ""
  453.     For I% = 1 To Len(String_In)
  454. If Mid$(String_In, I%, 1) = Chr$(39) Then
  455.     String_Out$ = String_Out$ + Chr$(39) + Chr$(39)
  456. Else
  457.     String_Out$ = String_Out$ + Mid$(String_In, I%, 1)
  458. End If
  459.     Next
  460.     PrepareString = String_Out$
  461. End Function
  462. Sub RetrieveTextTitles ()
  463. Rem
  464. Rem This routine will get all the text titles from the table
  465. Rem Put them in the list box as they are retrieved.
  466. Rem
  467.     ClearTextTitles
  468.     Results% = ExecuteSQLCommand("Select title from text_table")
  469.     Do While (SqlResults%(SqlConn%) <> NOMORERESULTS)
  470. Do While (SqlNextRow(SqlConn%) <> NOMOREROWS)
  471.     Titles_List.AddItem Sqldata(SqlConn%, 1)
  472. Loop
  473.     Loop
  474. End Sub
  475. Sub Text_Edit_KeyPress (KeyAscii As Integer)
  476.     If KeyAscii <> 0 Then
  477. KeyAscii = 0
  478.     End If
  479. End Sub
  480. Sub Text_File_List_Click ()
  481.     If Right$(Dir_Tree_Combo.Path, 1) = "" Then
  482. Text_File_Label.Caption = Dir_Tree_Combo.Path + Text_File_List.FileName
  483.     Else
  484. Text_File_Label.Caption = Dir_Tree_Combo.Path + "" + Text_File_List.FileName
  485.     End If
  486. End Sub
  487. Sub Title_Edit_KeyPress (KeyAscii As Integer)
  488.     If Len(Title_Edit.Text) = 30 Then
  489. If KeyAscii <> 8 Then
  490.     KeyAscii = 0
  491. End If
  492.     End If
  493.     
  494. End Sub
  495. Sub Titles_List_Click ()
  496.     Text_Edit.Text = ""
  497. End Sub
  498. Sub Titles_List_DblClick ()
  499.     Text_Title$ = Titles_List.Text
  500.     PrimaryWindow.MousePointer = 11
  501.     LoadText Text_Title$
  502.     PrimaryWindow.MousePointer = 0
  503. End Sub
  504. Sub VBSQL1_Error (SqlConn As Integer, Severity As Integer, ErrorNum As Integer, ErrorStr As String, RetCode As Integer)
  505. ' Call the required VBSQL error-handling function
  506. ' OSErr and OSErrStr not used in VBSQL for Windows, but DOS interprets
  507. ' anything other than -1 as an OS error
  508.     OsErr% = -1
  509.     RetCode% = UserSqlErrorHandler%(SqlConn, Severity%, ErrorNum%, OsErr%, ErrorStr$, OsErrStr$)
  510. End Sub
  511. Sub VBSQL1_Message (SqlConn As Integer, Message As Long, State As Integer, Severity As Integer, MsgStr As String)
  512.     UserSqlMsgHandler SqlConn, Message&, State%, Severity%, MsgStr$
  513. End Sub
  514. Sub View_Selection_Click ()
  515.     Text_Title$ = Titles_List.Text
  516.     If Text_Title$ = "" Then
  517. Beep
  518. MsgBox "You must first select a title."
  519.     Else
  520. PrimaryWindow.MousePointer = 11
  521. LoadText Text_Title$
  522. PrimaryWindow.MousePointer = 0
  523.     End If
  524. End Sub