الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Problem In Writetext

مغلق
بدأه HaithamNazzal في 22 أكتوبر 2007 · 5 رد · 962 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

تحياتي للجميع ،،،

لدي مشكلة في عملية ادخال صورة ذات حجم كبير جدا ، المشكلة انه لدي قاعدة بيانات قديمة كانت هذه الصورة مقسمة الى عدة صور (Chunks) واريد ان اجمع هذه الاقسام الى صورة واحده ...

اريد ان اعرف هذه Chunks في variables يعني :

declare @x1 as varbinary(8000)

declare @x2 as varbinary(8000)

declare @x3 as varbinary(8000)

.... set @x1 = 0x4

.... set @x2 = 0x4

.... set @x3 = 0x4

ثم اريد ان اجمع هذه varaiables في متغير واحد ... لكن المشكلة عندما اريد ان اعرف varaiable لا يستطيع ان يأخذ اكثر من 8000

قمت باستخدام WRITETEXT

WRITETEXT Table Name.Field Name @ptrval @x1 @x2 @x3

لكن المشكلة ان WRITETEXT لا تأخذ اكثر من متغير ... هل هناك حل لهذه المشكلة ... ارجو المشاعده

يــــا أقصى .... لا تنادي ..... فلن يجيبك احد

#2

لو كنت بتبحث بالـ Help لوجدت طلبك , تفضل :

سأفترض أنك تعمل بالـ SQL Server 2005 أقصد أن هذا المثال للإصدار 2005 وليس الـ 2000 :

D. Using OPENROWSET to bulk insert file data into a varbinary(max) column

The following example creates a small table for demonstration purposes, and inserts file data from a file named Text1.txt located in the C: root directory into a varbinary(max) column.

USE AdventureWorks
GO
CREATE TABLE myTable(FileName nvarchar(60), 
  FileType nvarchar(60), Document varbinary(max))
GO

INSERT INTO myTable(FileName, FileType, Document) 
   SELECT 'Text1.txt' AS FileName, 
	  '.txt' AS FileType, 
	  * FROM OPENROWSET(BULK N'C:\Text1.txt', SINGLE_BLOB) AS Document
GO

تم تعديل هذه المشاركة بواسطة imadouzoun في 23 أكتوبر 2007 في 07:52

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله

أخوكم في الله..  Imad Ozone

#3
imadouzoun كتب:
لو كنت بتبحث بالـ Help لوجدت طلبك , تفضل :

سأفترض أنك تعمل بالـ SQL Server 2005 أقصد أن هذا المثال للإصدار 2005 وليس الـ 2000 :

D. Using OPENROWSET to bulk insert file data into a varbinary(max) column

The following example creates a small table for demonstration purposes, and inserts file data from a file named Text1.txt located in the C: root directory into a varbinary(max) column.

USE AdventureWorks
GO
CREATE TABLE myTable(FileName nvarchar(60), 
  FileType nvarchar(60), Document varbinary(max))
GO

INSERT INTO myTable(FileName, FileType, Document) 
   SELECT 'Text1.txt' AS FileName, 
	  '.txt' AS FileType, 
	  * FROM OPENROWSET(BULK N'C:\Text1.txt', SINGLE_BLOB) AS Document
GO

عزيزي الاخ imadouzoun

اولا شكرا جزيلا لك على جهودك ،

انا اعلم ان هذه المشكلة التي قمت بشرحها تم حلها بال SQL server 2005 عن طريق (MAX) لكن مشكلتي تكمن في SQL Server 2000

واود اعلامك انني قمت باستخدام WRITETEXT بعد البحث طويلا ولكن واجهت مشكلة في انني لدي 3 صور اريد تجميعهم في صوره واحد وحجم ال 3 صور اكبر من 8000 !!! ولا استطيع ادخالها الى varaiable

واحد لان الحجم الثلاث صور حوالي 23000 وعند كتابة WRITETEXT لا استطيع ان اعطيه 3 parameters

شكرا لك مره اخرى عزيزي

يــــا أقصى .... لا تنادي ..... فلن يجيبك احد

#5

يا صاحبي الكريم .. ركّز معي شوي :

أولاً : ما هو نوع بيانات الحقل الذي تريد أن تضع فيه الصور , هل هو Image .. سأفترض ذلك و لنتابع ..

هذه الإجرائية المخزنة سوف تفيدك بإذن الله , شاركت بها سابقاً و رابط المشاركة موجود في توقيعي الخاص بعنوان :

"حشر أنواع الصور المختلفة في حقل من نوع Image "

وهذا الكود لا يعمل إلا على الإصدار 2000 ..

Create PROCEDURE Insert_Image_From_File
@filename nvarchar(128)=NULL,
@table nvarchar(128)=NULL,
@column nvarchar(128)=NULL,
@where nvarchar(2000)=NULL

AS
SET NOCOUNT ON
IF (@filename is NULL) OR (@table is NULL) OR (@column is NULL) OR (@where is NULL)
	BEGIN
	PRINT 'Error : Calling Proc'
	RETURN
	END
DECLARE @i int, @size int, @blocks int, @cmd varchar(8000)

create table #filedetails
(
  altname varchar(30),size int,
  createdate varchar(32),createtime varchar(32),lastwrittendt varchar(30),
  lastwrittentime varchar(32),lastaccessdt varchar(30),lastaccesstime varchar(32),
  attributes int
)

insert into #filedetails exec master..xp_getfiledetails @filename
set @size=(select size from #filedetails)
if @size=null
	BEGIN
	PRINT 'File error.'
	RETURN
	END

--Print @size

drop table #filedetails

SET @blocks=@size/8000+1

--Print @blocks 

--start dynamic SQL declaration
SET @cmd='DECLARE @ptrval binary(16), @fso int, @file int, @i int,@j int, @hr int, @buffer varbinary(8000)
EXEC @hr = sp_OACreate ''ADODB.Stream'', @file OUT 
EXEC @hr = sp_OAMethod @file, ''Open'' 
EXEC @hr = sp_oasetproperty @file, ''Type'', 1 
EXEC @hr = sp_oasetproperty @file, ''LoadFromFile'','''+@filename+''' 

Update ' + @table + ' Set ' + @column + '= 0x1 ' + @Where +

'
SELECT @ptrval = TEXTPTR('+@column+') FROM '+ @table + ' ' + @where + ' 

Set @j='+ LTrim(str(@blocks)) +'

if @j > 0 
begin
   exec @hr = sp_oamethod @file, ''read'',  @buffer out , 8000 
   WriteText '+@table+'.'+@column+' @ptrval @buffer 
   Set @j  = @j - 1
end 

while @j>0
begin 
   exec @hr = sp_oamethod @file, ''read'',  @buffer out , 8000 
   Set @i=(select DATALENGTH('+@column+') from '+@table+' '+@where+') 
   UPDATETEXT  '+@table+'.'+@column+' @ptrval @i 0 @buffer 
   Set @j=@j-1
end 

--execut dynamic SQL
EXEC @hr = sp_OAMethod @file, ''Close'' 
EXEC @hr = sp_OADestroy @file EXEC @hr = sp_OADestroy @fso'

print @cmd
Exec( @cmd)
GO

الاختبار :

Create Table Image_TB(id identity(0,1) , image_Col   Image Default Null)
Go
Insert Image_TB Default Values
Go

Exec Insert_Image_From_File 'C:\Greenstone.gif', 'Image_TB ', 'image_Col', 'Where id =0'
Exec Insert_Image_From_File 'C:\Greenstone.bmp', 'Image_TB ', 'image_Col', 'Where id =0'
Exec Insert_Image_From_File 'C:\Greenstone.jpg', 'Image_TB ', 'image_Col', 'Where id =0'
Exec Insert_Image_From_File 'C:\Greenstone.png', 'Image_TB ', 'image_Col', 'Where id =0'

أما بالنسبة لمشكلة تجميع أكثر من صورة ..

انظر إلى المثال التالي الذي يستخدم UpdateText

create table #t (n ntext) 
insert #t values('bd') 
DECLARE @ptrval binary(16), @i int 
SELECT @ptrval = TEXTPTR(n) FROM #t 
UPDATETEXT #t.n @ptrval 0 0 'a'--insert at beginning 
select * from #t UPDATETEXT #t.n @ptrval 2 0 'c'--insert in the middle 
select * from #t set @i=(select DATALENGTH(n) from #t)/2 --/2 only if ntext, 2 bytes/character 
print @i UPDATETEXT #t.n @ptrval @i 0 'e'--insert at the end 
select * from #t 
drop table #t

وأحب أن أنوّه أنك تستطيع أن تضع نوع البيانات Image على نفس المنوال ..

أتمنى أن أكون أفدتك بشيء ..

تم تعديل هذه المشاركة بواسطة imadouzoun في 24 أكتوبر 2007 في 02:33

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله

أخوكم في الله..  Imad Ozone

#6

أخي العزيز imadouzoun

شكرا جزيلا لجهودك ، لقد استفدت جدا من مشاركتك ، وقد ساعدتني في حل مشكلتي

يــــا أقصى .... لا تنادي ..... فلن يجيبك احد

هذا الموضوع مغلق.

مواضيع مشابهة