PDA

View Full Version : UPDATETEXT



faramarz_s
شنبه 25 مهر 1383, 15:20 عصر
برای آپدیت نمودن داده های از تایپ ntext یک نمونه می خواستم:

"UPDATETEXT tblStudentInfo Karname @karname WHERE

faramarz_s
شنبه 25 مهر 1383, 15:22 عصر
@karname یک پارامتر SQL است که در اپلیکیشن ایجاد شده است. ::نوشتن::

faramarz_s
شنبه 25 مهر 1383, 20:42 عصر
نمونه :roll: :confy2:

AminSobati
شنبه 25 مهر 1383, 20:56 عصر
دوست عزیزم،
برای استفاده از دستور UPDATETEXT یک جدول ایجاد میکنیم با دو رکورد نمونه:

CREATE TABLE Test(
C1 INT,
C2 nTEXT)

INSERT Test VALUES (1,'This is a sample text.')
INSERT Test VALUES (2,'Another sample text!')
دستور UPDATETEXT هم میتونه یک رشته کاراکتر به داخل متن اضافه(Insert) کنه و هم میتونه یک رشته رو با رشته جدیدی که میدین تعویض کنه(Update). کلا 5 پارامتر نیاز هست برای این دستور:
1) کدام فیلد برای Update مد نظر ماست
2) مقدار اون فیلد در چه آدرسی در فایل قرار گرفته
3) عمل Update از کاراکتر چندم شروع میشه
4) تعداد کاراکترهایی که باید حذف بشه (در صورت Update! اگر فقط قراره چیزی اضافه بشه، این مقدار صفر خواهد بود)
5) مقدار جدید به جای مقدار قدیمی (یا مقداری که باید Insert بشه)

اول توسط TEXTPTR باید پارامتر دوم رو تامین و در یک متغیر ذخیره کنیم. به عنوان مثال، جمله اولی که وارد جدول کردیم رو میخوایم به این شکل در بیاریم: This is not a sample text.
این کار Insert محسوب میشه، نه Update:

DECLARE @MyPointer BINARY(16)
SELECT @MyPointer = TEXTPTR(C2) FROM Test WHERE C1=1
UPDATETEXT Test.C2 @MyPointer 8 0 'not '
SELECT * FROM Test

عدد 8 به این معنیه که بعد از کاراکتر هشتم این کار انجام بشه و مقدار صفر یعنی قرار نیست هیچ کاراکتری حذف بشه. اما اگر بخواهیم Update انجام بدین و جمله بشه به حالت اول:


DECLARE @MyPointer BINARY(16)
SELECT @MyPointer = TEXTPTR(C2) FROM Test WHERE C1=1
UPDATETEXT Test.C2 @MyPointer 8 4 ''
SELECT * FROM Test
اینجا بعد از کاراکتر هشتم، 4 کاراکتر رو با '' یعنی با هیچ عوض کردیم.
به عنوان مثال دیگه، اگر بخواهیم is رو با was عوض کنیم(Update):


DECLARE @MyPointer BINARY(16)
SELECT @MyPointer = TEXTPTR(C2) FROM Test WHERE C1=1
UPDATETEXT Test.C2 @MyPointer 5 2 'was'
SELECT * FROM Test
یعنی از کاراکتر 5، دو کاراکتر رو حذف کن و به جای اون was قرار بده.
موفق باشید

faramarz_s
یک شنبه 26 مهر 1383, 10:37 صبح
بازنویسی تقریبی:

DECLARE @MyPointer BINARY(16)
SELECT @MyPointer = TEXTPTR(karname) FROM test WHERE
c1=1
UPDATETEXT test.karname @MyPointer 8 0 'not'
select * from test


Server: Msg 7133, Level 16, State 2, Line 4
NULL textptr (text, ntext, or image pointer) passed to UpdateText function.

(2 row(s) affected)

faramarz_s
یک شنبه 26 مهر 1383, 10:38 صبح
کارنامه را هم در دیتابیس ایجاد کرده و مقدار دادم! :sorry:

faramarz_s
یک شنبه 26 مهر 1383, 10:40 صبح
DECLARE @MyPointer BINARY(16)
SELECT @MyPointer = TEXTPTR(karname) FROM test WHERE
c1=1
UPDATETEXT test.karname @MyPointer 1 0 'not'
select * from test
1
This was a sample text. anotnot 2
Another sample text! d

faramarz_s
یک شنبه 26 مهر 1383, 10:41 صبح
DECLARE @MyPointer BINARY(16)
SELECT @MyPointer = TEXTPTR(karname) FROM test WHERE
c1=1
UPDATETEXT test.karname @MyPointer 'not'
select * from test

Server: Msg 170, Level 15, State 1, Line 4
Line 4: Incorrect syntax near 'not'.

faramarz_s
یک شنبه 26 مهر 1383, 10:44 صبح
سوال:
در صورتی که مقدار جدید یک پارامتر باشد کافی است آنرا با @ شروع کرده و نامش را بنویسیم؟

UPDATETEXT tblStudentInfo.karname @MyPointer @karname
در واقع کاری نداریم که از کاراکتر چندمه یا ... یک اپدیت معمولی مد نظر باشد :sunglass:

AminSobati
یک شنبه 26 مهر 1383, 11:51 صبح
دوست عزیزم،
- در مورد خطای اول، ظاهرا مقدار MyPointer@ برابر با NULL هستش. برای اینکه اطمینان پیدا کنیم در مورد این حدس، قبل از دستور UPDATETEXT یکبار SELECT @MyPointer رو بنویسید و موقع اجرا ببینین آیا واقعا NULL نشون میده؟
- در مورد خطای شماره 170، شما دو پارامتر رو جا انداختین!
- برای Update معمولی، از همون دستور Update هم میتونین استفاده کنین

faramarz_s
یک شنبه 26 مهر 1383, 19:40 عصر
برای Update معمولی، از همون دستور Update هم میتونین استفاده کنین
پیغام خطا می گیرد!
من که اصلا دوست نداشتم :mad: از این updatetext استفاده کنم.
اما ظاهرا الزامی هست برای آپدیت فیلدهای از جنس nText :گیج:

AminSobati
یک شنبه 26 مهر 1383, 22:39 عصر
من با Update مشکلی نداشتم، ولی به هر حال آیا مشکل شما با UPDATETEXT حل شد؟

faramarz_s
سه شنبه 28 مهر 1383, 14:25 عصر
با تشکر من هم با موفقیت تونستم آپدیت را انجام بدهم :<:

AminSobati
سه شنبه 28 مهر 1383, 14:58 عصر
:)

faramarz_s
سه شنبه 28 مهر 1383, 21:21 عصر
راستی یه آف تاپیک :? هم ما بزنیم تا سهممون را دیگران نگرفته اند. :mrgreen:
جناب ثباتی ما خیلی مخلصیم و از اینهمه بذل توجه و وقت گزاردن کسی که تا کنون ندیده امش :reading:
بسی سپاسگذار :D
اگر در هر تاپیکی این مهم را ابراز نمی داریم :kaf: حمل بر بی ادبی :متفکر: نفرموده و
به این رویه بس گرانقدر ادامه دهید :embr: :sunglass:
مخلص اساتید و مدیران سایت برنامه نویس :sunglass:

AminSobati
چهارشنبه 29 مهر 1383, 00:21 صبح
فرامرز جان،
شما و همه دوستان بیش از حد لطف دارید، حتی اگر این موضوع رو مطرح نمیکردین، ما باز هم فکر بدی نمیکردیم! :)
امیدوارم در همه کارهاتون موفق باشین دوست من