Что нового

Запись файла в БД

ScriptM

Новичок
Сообщения
4
Репутация
0
Уважаемые господа тут такие есть!
Подскажите, пытаюсь вставить файл в БД (MS SQL) в виде бинарных данных.
Сначала OpenFile, после ReadFile, потом SQL запросом делаю Update table.
Маленькие файлы записывает, а на большие говорит, что "Слишком большой запрос" SQL.
Да, естественно, там весь файл в качестве переменной туда передается.
Как это обойти?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
ScriptM
Где ваш код?
 
Автор
S

ScriptM

Новичок
Сообщения
4
Репутация
0
Код:
Код:
#include <Access_UDF.au3>
#include <ButtonConstants.au3>
#include <Constants.au3>
#include <File.au3>
#Include <FileOperations.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <String.au3>
#include <UserGUI.au3>
#include <WindowsConstants.au3>

Const $TMP_FILEPATH = @ScriptDir
Const $DataFile = $TMP_FILEPATH & "/DataAIRU.accdb"

;Папка c прикрепляемыми файлами по умолчанию
Const $FilesPath = @ScriptDir

;Пароль
Const $p = "123"


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



;Открываем соединение
Local $Connection = _Start_Connection($DataFile,"",$p)
ConsoleWrite($Connection & " connected" & @CRLF)

;Закрываем соединение
_Close_Connection()


;Запускаем интерфейс
RunGUI()

;Удалим окно загнруки (инициализации)

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

GUISetState()


Do

 	  ;Читаем GUI
	  $idMsg = GUIGetMsg(1)


		   ;Выбираем по типу события
		   Select
						;Закрытие окна
						Case $idMsg[0]=$GUI_EVENT_CLOSE

							  ExitLoop

						;Кнопка Добавления записи
						cASE $idMsg[0] = $ButtonADD

							  Add()

						;Кнопка диалогового окна выбора файла
						Case $idMsg[0] = $ButtonFILE

							  FileO(FileOpenDialog("Выберите файл  ", $FilesPath, "(*.jpg;*.bmp;*.pdf;*.gif;*.doc;*.docx;*.xls;*.xlsx)", 1 + 2))


		   EndSelect

Until $idMsg[0]=$GUI_EVENT_CLOSE

	_GUICtrlRichEdit_Destroy($iInputRASS)
	GUIDelete()
	;DllClose($hDLL)
	Exit

;Запускаем интерфейс
Func RunGUI()

	  Global $hGUI = GUICreate("Журнал", 1006, 1000, 0, 0, $WS_OVERLAPPEDWINDOW, $WS_EX_ACCEPTFILES)

	  ;Элемент добавления файла
	  Global $iInputFile = GUICtrlCreateInput('', 538, 244, 182, 22)
	  GUICtrlSetState(-1, $GUI_DROPACCEPTED)
	  GUICtrlSetResizing (-1, 802)
	  GUICtrlSetTip(-1, "Путь прикрепляемого файла")

	  ;Кнопка адреса файла
	  Global $ButtonFILE = GUICtrlCreateButton(" ", 730, 243, 46, 23)
	  GUICtrlSetResizing ($ButtonFILE, 802)
	  GUICtrlSetTip(-1, "Выбор файла")

	  ;Кнопка Добавления записи
	  Global $ButtonADD = GUICtrlCreateButton("Добавить", 298, 242, 99, 38, $BS_DEFPUSHBUTTON)
	  GUICtrlSetResizing ($ButtonADD, 802)

EndFunc

Func Add()

	  Local $Connection = _Start_Connection($DataFile,"",$p)
	  if GUICtrlRead($iInputFILE) <> "" Then

			   ;Имя таблицы
			   $filetablename = "files1"

			   $format = "test"

			   ;Если файл существует
			   If FileExists(GUICtrlRead($iInputFILE)) Then

					 ;Читаем как бинарный файл
					 $hFile = FileOpen(GUICtrlRead($iInputFILE), 16)

					 ;Проверяет, является ли файл открытым, перед тем как использовать функции чтения/записи в файл
					 If $hFile <> -1 Then

							$filesource = FileRead($hFile)

							If @error = 1 Then

								 $filesource = ""
								 MsgBox(8192,"", "Ошибка при чтении файла")

							EndIf

					 Else

						   $filesource = ""
						   MsgBox(8192,"", "Невозможно открыть файл.")

					 EndIf

					 FileClose($hFile)

			   Else

					 $filesource = ""
					 MsgBox(8192,"", "Файл не найден. Регистрация будет проведена без приложенного файла.")


			   EndIf


			   Local $res = _Create_Table("CREATE TABLE " & $filetablename & "(id int, order_num int, format CHAR, filesource OLEObject, PRIMARY KEY (id));")

			   if StringLeft($res, 6) = "Failed" Then

				  MsgBox(8192, "Ошибка", "Работа будет остановлена.")
				  GUIDelete()
				  Exit

			   EndIf

			   $res = _Insert_Data("INSERT INTO " & $filetablename & "([id], [format], [filesource]) VALUES ('1', '" & $format & "', " & $filesource & ")")

			   if StringLeft($res, 6) <> "Failed" Then

				  MsgBox(8192, "Ok", "Успешно добавлено")
				  GUIDelete()
				  Exit

			   EndIf

   EndIf

   _Close_Connection()


EndFunc

;Функция выбора файла
;$adress - адрес файла
Func FileO($adress)

	  If @error Then
		  MsgBox(4096, "", "Ошибка при выборе файла")
	   Else

		 GUICtrlSetData($iInputFILE, $adress)

	  EndIf


EndFunc


Все необходимое в архиве http:// rgho. st/7zJwWd8DS (во вложение не влезло).
 

Вложения

  • Access_UDF.au3
    14.6 КБ · Просмотры: 7
  • for a-i-ru.au3
    4.8 КБ · Просмотры: 4
Верх