powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как сохранить картинку в поле Image
11 сообщений из 11, страница 1 из 1
Как сохранить картинку в поле Image
    #37136198
Prg_Alex_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очень надо сохранять картинки в поле типа Image на SQL Server 2008 с помощью клиента на VFP 9.0
В поле типа Text прекрасно сохраняется. Но мне надо именно в Image. Кто сталкивался прошу совета.
...
Рейтинг: 0 / 0
Как сохранить картинку в поле Image
    #37137187
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Prg_Alex_!
1. Не надо использовать Image. Тем более ,что у вас SQL 2008!
BOLThis feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Use varchar(max), nvarchar(max) and varbinary(max) data types instead.
2. Для хранения фоток на SQL 2008 использую поля типа varbinary(max)
Читаю это поле в VFP через класс CursorAdapter (CD), где в схеме сопоставляю полю varbinary(max) на сервере, полю типа BLOB на клиенте:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
loCAD = CREATEOBJECT("CursorAdapter")
WITH loCAD
    .DataSourceType = "ODBC"
    .DataSource = Мое соединение с SQL  2008 . Драйвер должен "понимать" новый тип поля  varbinary(max)
    .FetchSize = - 1 
    .Alias = "tempPhoto"
    .CursorSchema = "TypFoto C(3), Photo Blob"
ENDWITH
TEXT TO m.loCAD.SelectCmd TEXTMERGE NOSHOW PRETEXT  15 
   SELECT TypFoto, Photo AS Photo FROM ТаблицаСКаринками WITH (NOLOCK)
    WHERE УсловиеОтбораНужнойЗаписи
ENDTEXT
IF m.loCAD.CursorFill(.T., .F.) AND !ISNULL(tempPhoto.Photo)
     *-Делаю с картинкой, которая в tempPhoto.Photo и tempPhoto.TypFoto чего мне надо, например, копирую в другой курсор, отображаю в объекте Image и т.п.
....     
ENDIF
USE IN SELECT("tempPhoto")
С записью все проще:
При формировании команды обновления таблицы с картинкой есть такая запись:
Код: plaintext
1.
2.
3.
TEXT TO lcCommand TEXTMERGE NOSHOW PRETEXT  7 
    EXEC dbo.МояПроцедураОбновленияЗаписисиНаСервере @PAR1_ID=<<....>>, ..
          @Photo = ?ЛокальныйКурсор.Photo
ENDTEXT
Где поле ЛокальныйКурсор.Photo имеет такое DDL выражение: Photo Blob NULL, а параметр @Photo в хранимой процедуре
описан так: @Photo VARBINARY(Max) = NULL

Затем команда lcCommand посылается на сервер через SQLEXEC.
С уважением, Алексей
...
Рейтинг: 0 / 0
Как сохранить картинку в поле Image
    #37137662
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey-KС записью все проще:
...
Затем команда lcCommand посылается на сервер через SQLEXEC.


курсорадаптер и сам умеет сохранять назад.
...
Рейтинг: 0 / 0
Как сохранить картинку в поле Image
    #37138800
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошелмимоAleksey-KС записью все проще:
...
Затем команда lcCommand посылается на сервер через SQLEXEC.


курсорадаптер и сам умеет сохранять назад.
Назад, это куда?
У меня хранимая процедура обновляет шесть таблиц на сервере! Картинка в одной из них.
И как тут CA поможет мне "назад" сохранить картинку?
С уважением, Алексей
...
Рейтинг: 0 / 0
Как сохранить картинку в поле Image
    #37138943
Юристишко-выпускник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey-Kпрошелмимопропущено...


курсорадаптер и сам умеет сохранять назад.
Назад, это куда?
У меня хранимая процедура обновляет шесть таблиц на сервере! Картинка в одной из них.
И как тут CA поможет мне "назад" сохранить картинку?
С уважением, Алексей

а у других
6 курсорадаптеров могут обновлять 6 таблиц.

и без ХП. не?

Aleksey-Kпоможет мне "назад"

если только у Вас так реализовано, то Вы считаете, что нужно возмущаться
на замечание о том,
что правильно настроенный КАД может без ХП получить данные с сервера и назад
сохранить эти изменения?

как это поможет Вам - мне безразлично,
я заметил, что если взять КАД, настроить его,
получить данные,
внести изменения,
то КАД сам и сохранит назад эти изменения.

так понятно?
...
Рейтинг: 0 / 0
Как сохранить картинку в поле Image
    #37139069
Юристишко-выпускник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пример взаим-я с сервером посредством только курсорадаптера
(без ХП)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
* скрипт для создания тестовой таблички
#if .f.
	CREATE TABLE [dbo].[testImage](
		[id] [int] IDENTITY( 1 , 1 ) NOT NULL,
		[Image] [image] NULL
	) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
#endif


close databases all
local lcConnString, lnConnection, ;
	loMyCAD as CursorAdapter, ;
	laErrors[ 1 ], ;
	lcFileName
* строка соединения с сервером	
text to lcConnString noshow pretext  15 
	Driver=SQL Native Client;
	SERVER=.\SQLSERVER2005;
	DATABASE=Test;
	uid=sa;
	pwd=as;
endtext	
lnConnection = sqlstringconnect(lcConnString)
if lnConnection<= 0 
   messagebox('не подцепился')
   return 
endif

loMyCAD = createobject('CursorAdapter')
with loMyCAD
	.Alias              = 'MyAlias'
	.DataSourceType     = 'ODBC'
	.DataSource         = lnConnection
	.SelectCmd          = "select [id], [Image] from testImage"
	.Tables             = 'testImage'
	.BufferModeOverride =  5 
	.cursorschema       = "id i, Image m NOCPTRANS"
	.MapBinary          = .t.
	.keyFieldList       = 'id'
	.UpdatableFieldList = 'Image'
	.updateNameList     = 'id testImage.id, Image testImage.Image'
	if .CursorFill(.t.)
		lcFileName = GetFile("bmp","покажите картинку")
		if !Empty(lcFileName)
			* если указали файлик,
			* то запишем его в курсор курсорадаптера
			Insert into MyAlias (Image) ;
			        values (filetostr(lcFileName))
			* сохраняем на сервер        
			if !tableupdate(.t.,.t.,.Alias)
				aerror(laErrors)
			    messagebox(laErrors[ 2 ])
			EndIf
		EndIf
		* смотрим, что лежит на сервере
		If .cursorrefresh()	
			loImage = CreateObject("Image")
			With _screen
				If !PemStatus(_screen, "oBmp",  5 )
					.ADDOBJECT("oBmp","Image")
				EndIf 
				WITH .oBmp
					.zOrder( 1 )
					.visible =.T.
					* пробежим все, что есть 
					* и посмотрим
					select MyAlias						
					Scan
						.Pictureval = MyAlias.Image
						Wait WINDOW "нажми клавишу"
					EndScan
				EndWith
			EndWith 
		EndIf
	else
		aerror(laErrors)
		messagebox(laErrors[ 2 ])
	endif .CursorFill(.t.)
endwith
...
Рейтинг: 0 / 0
Как сохранить картинку в поле Image
    #37142093
Prg_Alex_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
* lcPicStr=(THISFORM.image1.PICTUREVAL)

lcPicStr=CREATEBINARY(THISFORM.image1.PICTUREVAL)
SQLEXEC(thisform.conn1,"Update Imgs Set Img=?lcPicStr Where Id=?thisform.lnId")

Инфа отсюда http://fox.wikis.com/wc.dll?Wiki~ImageData
...
Рейтинг: 0 / 0
Как сохранить картинку в поле Image
    #37142128
Prg_Alex_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
conn1 = SQLCONNECT(датасоурс,имя,пароль)
*Без этого свойства выпадет ошибка
CursorSetProp("MapBinary",.T.,0)
IF conn1<0
MESSAGEBOX(MESSAGE())
RETURN
ENDIF

SQLEXEC(conn1,"SELECT Img=Case when DATALENGTH(img)=0 or img is null then null else img end FROM Imgs WHERE Id=?id",cCur)
IF ISNULL(cCur.Img)
thisform.image1.PictureVal = cCur.Img
ENDIF
...
Рейтинг: 0 / 0
Как сохранить картинку в поле Image
    #37142489
Юристишко-выпускник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Prg_Alex SQLEXEC(....

Вы все-же решили "трепать" сервер и себя "убивать" руками?
...
Рейтинг: 0 / 0
Как сохранить картинку в поле Image
    #37145253
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юристишко-выпускникPrg_Alex SQLEXEC(....

Вы все-же решили "трепать" сервер и себя "убивать" руками?
Что значит "трепать" сервер? Не морочьте людям голову, "знаток" SQL Server!
А что вы думаете посылает на сервер ваш CA ?
Вы смотрели через SQL Profiler что идет на сервер при использование CA?
Или вы думаете, что CA задействует какую-то "тайную" технологию, иную, чем ту, что использует SQLEXEC?
Иначе причем тут "трепать" сервер?
Могу вас разочаровать, ваш "высокоинтеллектуальный" CA посылает на сервер точно такую же команду, что и "примитивный" SQLEXEC:
exec sp_executesql N'INSERT INTO testImage (Image) VALUES (@P1 )',N'@P1 varbinary(246)',0x424DF600000000000000760000002800.....

Юристишко-выпускник и себя "убивать" руками?
Сравните объем кода, который привели вы и который привел Prg_Alex_
Кто себя будет "убивать" руками!!!
...
Рейтинг: 0 / 0
Как сохранить картинку в поле Image
    #37145834
Юристишко-выпускник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey-KСравните объем кода, который привели вы и который привел Prg_Alex_
Кто себя будет "убивать" руками!!!

да шо ви говорите.
мне надо было положить визуальную библиотеку?
зашибись довод, я ржу нимагу просто -
остальные доводы закончились?

Могу Вас разочаровать,
но команды обновления КАД посылает самостоятельно,
без участия программиста.

Программисту не нужно писать руками команды
добавления, изменения, удаления записей в таблице сервера.
Вы это не можете заметить?
Профайлером Вы меня просто убили,
на курсорадаптер уже смотрю дольше пятилетки
и всю жисть выкладывал трейсы, ога?

В этом и весь секрет.
Разработчик без особых трудозатрат
взаимодействует с сервером.

Не, какие еще доводы привести о том,
что абстрактный класс курсорадаптер снижает трудозатраты?
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как сохранить картинку в поле Image
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]