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