ورود

View Full Version : انتقال داده های فایل csv به جدول sql2012



khoshblagh
یک شنبه 10 آبان 1394, 08:31 صبح
با سلام خدمت دوستان
میخواهم دادهای یک فایل csv را به جدول موجود در sql2012 منتقل نمایم . ساختار جدول در sql2012 به صورت فیلدهای varchar بوده و فقط فیلد آخری به نام mablagh نوع int میباشد.با دستور زیر

cmdImportData .CommandText:='BULK INSERT dbo.tblImportData FROM '+
' ''c:\Importdata.csv'' ' +
' WITH (FirstRow=1,FIELDTERMINATOR='';'''+
',ROWTERMINATOR = ''\n'')';


خطای زیر گرفته میشود.
به نظر شما کجای کارم اشتباه است؟ متشکرم

یوسف زالی
یک شنبه 10 آبان 1394, 15:56 عصر
لطفا فایل رو به همراه اسکریپت جدول بگذارید.

khoshblagh
دوشنبه 11 آبان 1394, 17:41 عصر
با تشکر از جناب آقای زالی
در حال حاضر مشکل اولیه با حذف فیلدی از نوع auto number که در جدول مقصد تعبیه شده بود حل شد. پس کد پست شماره یک مشکلی ندارد. ولی اگر بخواهیم به جای آدرس دهی فایل csv به صورت رشته از یک ادیت باکس که حاوی آدرس فایل میباشد استفاده نمائیم خطای زیر اتفاق میافتد. 136429
با جستجوی در سایتهای خارجی به نظر میرسد این مشکل در استفاد ه از کوتیش مارک باشد.کد مورد نظر به شکل زیر تغییر داده شده است.



cmdImportData .CommandText:='BULK INSERT dbo.tblImportData FROM '+
edtCSVFileName.Text+
' WITH (FIELDTERMINATOR='';'''+
',FirstRow=2'+
',ROWTERMINATOR = ''\n'')';

یوسف زالی
دوشنبه 11 آبان 1394, 23:20 عصر
استفاده از تابع QuotedStr خیلی خوبه و در این مواقع راهگشاست.
خوشحالم که مشکلتون حل شد. موفق باشید.

khoshblagh
سه شنبه 12 آبان 1394, 09:04 صبح
ضمن تشکر مجدد از جناب آقای زالی در پیگیری تا حل مسئله
در حال حاضر مشکل انتقال به جدول sql حل شد. ولی فیلدی از آن که حاوی اسامی افراد میباشد به صورت علامت ؟ مخلوط با کارکترهای گرافیکی به جدول منتقل میشود. فایل csv اسامی را بدرستی نمایش میدهد. از طرفی در sql و بصورت Import هم فیلد مورد نظر بدرستی منتقل میشود. لذا این مشکل در سمت دلفی ایجاد میشود. به نظر شما مشکل چگونه برطرف میشود؟ متشکرم.

یوسف زالی
سه شنبه 12 آبان 1394, 10:08 صبح
این ایراد مربوط به یونیکد هست. ببینید فرمت ذخیره فایل CSV چی هست و اون رو عوض کنید و دوباره تست کنید.
اگر امکان این رو دارید که نسخه های بالاتر دلفی رو استفاده کنید، این کار رو انجام بدید.
اگر ایراد در سمت دلفی نبود، می تونید روی خود دستور اس کیو ال کدپیج ست کنید.



WITH (CODEPAGE = '1256', FIELDTERMINATOR = ',', ROWTERMINATOR = '\n')

khoshblagh
سه شنبه 12 آبان 1394, 10:57 صبح
با تشکر از راهنمایی کامل شما
من از XE4 و ویندوز 7 استفاده میکنم. ضمنا با کد بالا مشکل یونیکد هم حل شد. متشکرم