PDA

View Full Version : سوال: فرستادن 400000 رکورد به اکسل



Reza798
سه شنبه 16 آذر 1389, 10:51 صبح
با سلام

من ميخواهم حداقل 400000 رکورد را از DataGridView به اکسل بفرستم ولي با اين تعداد رکورد زمان زيادي طول مي کشد يا برنامه قفل مي کنه . کسي روشي براي اين کار سراغ داره.

M.YasPro
سه شنبه 16 آذر 1389, 11:46 صبح
سلام
اگر بطور حرفه ای بخواید با این مساله برخورد کنید باید از MultiThreading استفاده کنید .
توی همین تالار مطالب مفیدی رو در مورد برنامه نویسی چند نخی می تونید با جستجو پیدا کنید .
موفق باشید./

hamidreza20
چهارشنبه 17 آذر 1389, 06:57 صبح
سلام دوست عزیز
می تونی کلیه داده موجود در دیتا گرید رو در یک فایل متنی بریزی(بین فیلد ها از tab استفاده کن) سپس از روی فایل توی دیتابیس Import کنی. من در یک پروژه که حدود یک میلیون و هشتصد هزار رکورد داشت این کار رو کردم . البته به دلیل سرعت پایین اکسس در حجم داده ای بالا بهتره در صورت مقدور بودن از sql استفاده کنی.
التماس دعا...

Reza798
چهارشنبه 17 آذر 1389, 08:05 صبح
سلام دوست عزیز
می تونی کلیه داده موجود در دیتا گرید رو در یک فایل متنی بریزی(بین فیلد ها از tab استفاده کن) سپس از روی فایل توی دیتابیس Import کنی. من در یک پروژه که حدود یک میلیون و هشتصد هزار رکورد داشت این کار رو کردم . البته به دلیل سرعت پایین اکسس در حجم داده ای بالا بهتره در صورت مقدور بودن از sql استفاده کنی.
التماس دعا...

با تشکر

ميتوني بيشتر توضيح بدي. من ميخوام خروجي را به اکسل بفرستم منظورت از import به دیتابیس چیست.

hamidreza20
چهارشنبه 17 آذر 1389, 10:12 صبح
با تشکر

ميتوني بيشتر توضيح بدي. من ميخوام خروجي را به اکسل بفرستم منظورت از import به دیتابیس چیست.

یک فایل تکست دست کن و در هر سطر آن یک عدد بنویس مثل زیر :
1
2
3
4
.
.
می تونی در هر سطر چندین فیلد رو با delemeter یا جدا کننده که معمولا tab یا ویرگول است رو جدا کنی.

در دیتا بیس اکسس یک جدول بساز سپس روی جدول رایت کلیک کن و گزینه Import رو انتخاب کن و گزینه Import from text رو انتخاب کن و مراحل رو دنبال کن و هنگام import کاراکتر جدا کننده رو انتخاب کن ...

التماس دعا...

hamidreza20
چهارشنبه 17 آذر 1389, 10:14 صبح
یادم رفت بگم که برای ارسال اطلاعات از گرید به اکسل می تونی توی همین سایت جستجو کنی کدهای ارزشمندی رو دوستان و اساتید محترم قرار دادند.

التماس دعا...

Reza798
چهارشنبه 17 آذر 1389, 21:30 عصر
یادم رفت بگم که برای ارسال اطلاعات از گرید به اکسل می تونی توی همین سایت جستجو کنی کدهای ارزشمندی رو دوستان و اساتید محترم قرار دادند.

التماس دعا...

با تشکر

من میخوام رکوردها را در اکسل وارد کنم . ولی چون تعداد آنها خیلی زیاده خیلی طول می کشه و اکثرا درست کار نمی کنه . حتی با استفاده از ترد هم مشکل حل نشد . به نظر شما میشه ابتدا در یک فایل تکست رکوردها را ذخیره کرد بعد آن را در کد وارد اکسل کرد. آیا این روش سریعتر است.

hamidreza20
پنج شنبه 18 آذر 1389, 10:48 صبح
با تشکر

من میخوام رکوردها را در اکسل وارد کنم . ولی چون تعداد آنها خیلی زیاده خیلی طول می کشه و اکثرا درست کار نمی کنه . حتی با استفاده از ترد هم مشکل حل نشد . به نظر شما میشه ابتدا در یک فایل تکست رکوردها را ذخیره کرد بعد آن را در کد وارد اکسل کرد. آیا این روش سریعتر است.

ذخیره و بازیابی اطلاعات در فایل به مراتب سریعتر از دیتابیس است ولی به دلیل محدودیتهای فایل ها و امکانات بسیار زیاد DBMS ها باید از دیتا بیس استفاده کرد. اما شما در این مورد می تونید اگر داده ها یتان را در یک فایل txt ذخیره کنید بسیار سریع . سپس به اکسس یا اسکیو ال یا اکسل import کنی .

بگید کارتون دقیقا چیه تا بتونم کمک بهتری به شما کنم شاید اصلا راه حل شما درست نباشد و یا روش های بهتری را بتوان پیاده کرد...
التماس دعا...

Reza798
پنج شنبه 18 آذر 1389, 22:48 عصر
ذخیره و بازیابی اطلاعات در فایل به مراتب سریعتر از دیتابیس است ولی به دلیل محدودیتهای فایل ها و امکانات بسیار زیاد DBMS ها باید از دیتا بیس استفاده کرد. اما شما در این مورد می تونید اگر داده ها یتان را در یک فایل txt ذخیره کنید بسیار سریع . سپس به اکسس یا اسکیو ال یا اکسل import کنی .

بگید کارتون دقیقا چیه تا بتونم کمک بهتری به شما کنم شاید اصلا راه حل شما درست نباشد و یا روش های بهتری را بتوان پیاده کرد...
التماس دعا...

با تشکر

ببینید من چند تا فرم ایجاد کردم که برای گزارشگیری استفاده می شود . به این صورت که کاربر تاریخ ابتدا و انتها را وارد می کند و دکمه نمایش را کلیک می کند . نتیجه اجرا در یک DataGridView نمایش داده می شود .( مشتری ما می خواهد فرم ها خروجی به اکسل نیز داشته باشد) - من در هر فرم یک دکمه خروجی به اکسل قرار دادم که با کلیک آن رکورد ها از DataGridView سطر به سطر خوانده شده و به اکسل وارد می شوند - مشکل اینجاست که وقتی تعداد رکوردها خیلی زیاد می شود زمان زیادی طول می کشد یا اصلا درست انجام نمی شود. به نظر شما راه حل بهتری برای این کار هست.

Reza798
شنبه 20 آذر 1389, 12:19 عصر
ذخیره و بازیابی اطلاعات در فایل به مراتب سریعتر از دیتابیس است ولی به دلیل محدودیتهای فایل ها و امکانات بسیار زیاد DBMS ها باید از دیتا بیس استفاده کرد. اما شما در این مورد می تونید اگر داده ها یتان را در یک فایل txt ذخیره کنید بسیار سریع . سپس به اکسس یا اسکیو ال یا اکسل import کنی .

بگید کارتون دقیقا چیه تا بتونم کمک بهتری به شما کنم شاید اصلا راه حل شما درست نباشد و یا روش های بهتری را بتوان پیاده کرد...
التماس دعا...

با تشکر

ببینید من چند تا فرم ایجاد کردم که برای گزارشگیری استفاده می شود . به این صورت که کاربر تاریخ ابتدا و انتها را وارد می کند و دکمه نمایش را کلیک می کند . نتیجه اجرا در یک DataGridView نمایش داده می شود .( مشتری ما می خواهد فرم ها خروجی به اکسل نیز داشته باشد) - من در هر فرم یک دکمه خروجی به اکسل قرار دادم که با کلیک آن رکورد ها از DataGridView سطر به سطر خوانده شده و به اکسل وارد می شوند - مشکل اینجاست که وقتی تعداد رکوردها خیلی زیاد می شود زمان زیادی طول می کشد یا اصلا درست انجام نمی شود. به نظر شما راه حل بهتری برای این کار هست.

Reza798
دوشنبه 22 آذر 1389, 16:26 عصر
کسی نظری نداره

FastCode
دوشنبه 22 آذر 1389, 23:23 عصر
بحث فلسفی:
من موقعی که کاربر تصمیم میگیره که گزارش برنامه ی من رو به یک برنامه دیگه export کنه ازش میپرسم که چرا میخواد این کار رو بکنه و خواسته ای رو که از اون برنامه داره در برنامه خودم پیاده میکنم.

راه حل نسبی:
استفاده از progressbar

راه حل احتمالی:
اگر از xml foramt برای export استفاده میکنید از binary استفاده کنید.
سرعت به مراتب بیشتره:

راه حل با پتانسیل بالا:
اگر از یک ابزار کدباز برای export استفاده میکنید میتونید با چند تا تغییر مشکل رو حل کنید.


آخرین راه حل که شاید از همه مهمتر باشه استفاده از memorymappedfile است.

Reza798
سه شنبه 23 آذر 1389, 08:46 صبح
بحث فلسفی:
من موقعی که کاربر تصمیم میگیره که گزارش برنامه ی من رو به یک برنامه دیگه export کنه ازش میپرسم که چرا میخواد این کار رو بکنه و خواسته ای رو که از اون برنامه داره در برنامه خودم پیاده میکنم.

راه حل نسبی:
استفاده از progressbar

راه حل احتمالی:
اگر از xml foramt برای export استفاده میکنید از binary استفاده کنید.
سرعت به مراتب بیشتره:

راه حل با پتانسیل بالا:
اگر از یک ابزار کدباز برای export استفاده میکنید میتونید با چند تا تغییر مشکل رو حل کنید.


آخرین راه حل که شاید از همه مهمتر باشه استفاده از memorymappedfile است.


با تشکر

لطفا دو راه حل آخر را بیشتر توضیح دهید . چگونه از چند متغیر استفاده کنم.

FastCode
سه شنبه 23 آذر 1389, 16:27 عصر
با تشکر

لطفا دو راه حل آخر را بیشتر توضیح دهید . چگونه از چند متغیر استفاده کنم.
ابزارهای کدباز و مخصوصاً آنهایی که از روز اول کدباز طراحی شدن خیی از edge case ها و attribute ها رو در نظر میگیرن که ممکنه برای شما لازم نباشه.حذفشپن کنید.
memorymappedfile هم فکر نمیکنم اینجا جا بشه ولی خلاصش اینه که اگر در export به مقادیر قبلاً نوشته شده در فایل رجوع میکنید و یا اینکه اندازه قطعات متنی که در هر بار flush میشود خیلی با هم متفاوت است یا اینکه روش عملکرد کد شما synchronous است میتوانید افزایش سرعت چشمگیری را شاهد باشید.
روش استفاده هم در گوگل و msdn موجوده.