PDA

View Full Version : کمبود جای Datatype ها برای ذخیره اطلاعات



maxpayn2
دوشنبه 15 بهمن 1386, 08:20 صبح
سلام
من یک فایل اکسل دارم و میخوام اون رو Import کنم ، تمام نوع های داده مثل ntext یا nvarchar(4000) رو هم امتحان کردم ولی باز هم خطای truncate میده

AminSobati
دوشنبه 15 بهمن 1386, 08:23 صبح
دوست عزیزم ممکنه پیغام خطا رو عینا پست کنید؟

maxpayn2
دوشنبه 15 بهمن 1386, 08:35 صبح
http://i25.tinypic.com/z7l3p.jpg

AminSobati
دوشنبه 15 بهمن 1386, 09:07 صبح
شاید این کمک کنه: از جدول موجود استفاده نکنین، از پیشنهاد خودش برای ساخت جدول مقصد استفاده کنین

maxpayn2
دوشنبه 15 بهمن 1386, 09:12 صبح
جدولی موجود نیست ، فقط یه دیتا بیس خالی ساختم

AminSobati
دوشنبه 15 بهمن 1386, 09:22 صبح
پس باید فایل رو دید. اگر مشکلی نیست از این بابت یک نمونه ارسال کنید

maxpayn2
دوشنبه 15 بهمن 1386, 09:32 صبح
ممنون ، یک فایل اکسل که نمونه کوچکی از فایل اصلی هست رو ضمیمه کردم

maxpayn2
دوشنبه 15 بهمن 1386, 11:20 صبح
یه چیزه جالب ، با SQL 2000 تست کردم شماره ردیفی رو که تو فایل اکسل باعث این خطا شده بود رو نشون داد ، یه فایل اکسل جدید باز کردم و فقط همون ردیف رو توش کپی کردم و بدون هیچ مشکلی Import کرد ، دلیلش چیه ؟ مشکل اینجاس که فایل اکسل اصلی حدود 7200 تا ردیف داره و نمیشه یکی یکی تستشون کرد

reza_rad
دوشنبه 15 بهمن 1386, 11:29 صبح
ممنون ، یک فایل اکسل که نمونه کوچکی از فایل اصلی هست رو ضمیمه کردم
دوست عزیز من این فایل رو تست کردم بدون مشکل Import شد. البته من sheet 1 رو تست کردم.

بهتره فایلی رو که مشکل داری و دقیقا همون شیت رو بذاری تا تست کنیم ببینیم مشکل از چیه.

maxpayn2
دوشنبه 15 بهمن 1386, 11:54 صبح
ممنون ، همون شیت 1 هستش ولی حدود 7200 تا ردیف داره ، فایل کامل رو ضمیمه میکنم

reza_rad
دوشنبه 15 بهمن 1386, 14:15 عصر
دوست عزیز شما نیاز به تغییر کوچکی در رجیستری داری:

1. On the Start menu, click Run. In the Run dialog box, type Regedt32, and then click OK.
2. Open the following key in the Registry editor:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engi nes\Excel
3. Double-click TypeGuessRows.
4. In the DWORD editor dialog box, click Decimal under Base. Type a value between 0 and 16, inclusive, for Value data.
5. Click OK, and then exit the Registry Editor.
A second way to workaround this problem (without modifying the registry) is to make sure that rows with fields, which have data 255 characters or greater, are present in the first 8 rows of the source data file.

Back to the top
MORE INFORMATION
The valid range of values for the TypeGuessRows key is 0 to 16. However, if the value is 0, the number of source rows scanned is 16384. Keep in mind that a value of zero may cause a small performance hit if the source file is very large.

منبع:
PRB: Transfer of Data from Jet 4.0LEDB Source Fails with Buffer Overflow Error (http://support.microsoft.com/kb/281517/EN-US/)

دلی بروز مشکل هم اینه:

The Jet OLE DB provider reads a registry key to determine how many rows are to be read to guess the type of the source column. The registry setting is:

HKLM\Software\Microsoft\Jet\4.0\Engines\Excel\Type GuessRows

By default, the value for this key is 8. Hence, the provider scans the first 8 rows of the source data to determine the data types for the columns. If any field looks like text and the length of data is more than 255 characters, the column is typed as a memo field. So, if there is no data with a length greater than 255 characters in the first 8 rows of the source, Jet cannot accurately determine the nature of the data type.

maxpayn2
دوشنبه 15 بهمن 1386, 14:55 عصر
خیلی ممنون ،‌ الان که دارم جواب شما رو میخونم پای اون دستگاه نیستم ،‌ چک میکنم جواب رو خدمتتون عرض میکنم

maxpayn2
سه شنبه 16 بهمن 1386, 10:11 صبح
تست کردم ، اون عدد رو روی 16 گذاشتم ولی باز هم همون ارور رو میده (win2003,sql2005,excel2003)

reza_rad
سه شنبه 16 بهمن 1386, 10:47 صبح
تست کردم ، اون عدد رو روی 16 گذاشتم ولی باز هم همون ارور رو میده
دوست عزیز مقدار رو بذارید 0
ضمنا نوعش باید Decimal باشه.

من تست کردم. جواب میده

maxpayn2
سه شنبه 16 بهمن 1386, 10:58 صبح
آقا دمت گرم ، درست شد ، البته خودش nvarchar رو پیشنهاد میکنه ولی ntext که گذاشتم جواب داد ، البته اون عدد رو هم 0 گذاشتم