نمایش نتایج 1 تا 11 از 11

نام تاپیک: افزودن همزمان چند رکورد به بانک اکسس

  1. #1
    کاربر دائمی
    تاریخ عضویت
    شهریور 1382
    محل زندگی
    هلند
    پست
    1,709

    افزودن همزمان چند رکورد به بانک اکسس

    سلام
    من سرگرم نوشتن برنامه ای هستم که در آن باید اطلاعات را از یک بانک اکسس گرفته و پس از انجام برخی محاسبات در فایل اکسل بنویسم .
    در خواندن از اکسس و نوشتن در اکسل مشکلی ندارم . تنها مشکلی که هست سرعت میباشد .
    شیوه کار من به شکل زیر است :
    • رکوردهایی را که میخوام روی آنها محاسبه ای صورت گیرد از بانک اکسس میخوانم
    • پس از هر بار خواندن رکوردها باید نتیجه محاسبه در چند سطر در اکسل نوشته شود . حال من ناچارم با هر بار محاسبه یکبار اطلاعات را با دستور insert into به اکسل بفرستم تا ذخیره شود.
    • رکورد جدیدی را میخوانم و دوباره همان مراحل تکرار میشود.
    مسئله اینجاست که مراحل خواندن از دیتابیس و ذخیره در اکسل زمانبر است یعنی سرعت کم میشه .
    حال سوال من اینه که آیا میتوان مراحل فوق را به شکل زیر درآورد و این انتقالات را کمتر کرد؟
    • رکورددها از بانک اکسس خوانده شوند
    • محاسبات روی فیلدها انجام و در جایی غیر از اکسل ( مثلا یک رشته ) شده .
    • رکورد جدیدی خوانده شده و به انتهای همان رشته اضافه شود.
    • پس از اتمام عملیات خواندن از روی اکسس و انجام محاسبات یکباره در اکسل ذخیره شود.
    در این حالت فقط یکبار آنهم در پایان کار مراجعه به فایل اکسس انجام شده که سرعت خیلی بالا میرود.

    آیا این کار امکانپذیر هست یا خیر؟

  2. #2
    کاربر دائمی
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    تهران
    پست
    147
    به نظرم شما اگر از کریستال ریپورت استفاده کنید می توانید اطلاعات را از بانک بخوانید بعد به کریستال پاس کنید سپس بااستفاده از کریستال عملیات مورد نظر را انجام دهید سپس گزارش اماده چاب ، تبدیل به اکسل و یا ورد می باشد
    البته فقط یک پیشنهاد است

  3. #3
    کاربر دائمی
    تاریخ عضویت
    شهریور 1382
    محل زندگی
    هلند
    پست
    1,709
    نقل قول نوشته شده توسط art2000ir مشاهده تاپیک
    به نظرم شما اگر از کریستال ریپورت استفاده کنید می توانید اطلاعات را از بانک بخوانید بعد به کریستال پاس کنید سپس بااستفاده از کریستال عملیات مورد نظر را انجام دهید سپس گزارش اماده چاب ، تبدیل به اکسل و یا ورد می باشد
    البته فقط یک پیشنهاد است
    سلام
    من نمیتوانم از کریستال استفاده کنم چون رایگان نیست .

  4. #4
    نقل قول نوشته شده توسط Hossein Bazyan مشاهده تاپیک
    سلام
    من نمیتوانم از کریستال استفاده کنم چون رایگان نیست .
    خوب از نسخه رایگان (رجیستر شده) استفاده کنید.

  5. #5
    کاربر دائمی
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    تهران
    پست
    147
    من نمیتوانم از کریستال استفاده کنم چون رایگان نیست .
    کریستال که همراه خود وبی نصب میشه و به نظرم استفاده از اون مشکلی نداشته باشه
    به هر حال
    شما نمی توانید یک حدول temp داشته باشید ؟؟
    اطلاعات را از بایک بخوانید و با استفاده از حلقه عملیات را انجام دهید در حدول تمپ ذخیره کید وبعد یک جا به اکسل بفرستید ؟؟؟

  6. #6
    کاربر دائمی
    تاریخ عضویت
    شهریور 1382
    محل زندگی
    هلند
    پست
    1,709
    نقل قول نوشته شده توسط art2000ir مشاهده تاپیک
    کریستال که همراه خود وبی نصب میشه و به نظرم استفاده از اون مشکلی نداشته باشه
    به هر حال
    شما نمی توانید یک حدول temp داشته باشید ؟؟
    اطلاعات را از بایک بخوانید و با استفاده از حلقه عملیات را انجام دهید در حدول تمپ ذخیره کید وبعد یک جا به اکسل بفرستید ؟؟؟
    سلام
    خوب همون میشه که من باهاش مشکل دارم . یعنی یه بار خواندن از اکسس انجام عملیات و جندین بار نوشتن در یک اکسس دیگه بعنوان temp

  7. #7
    کاربر دائمی
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    تهران
    پست
    147
    ببیند شما اطلاعات رو از بانگ می خونید میریزید توی دیتاست بعد عملیات رو روی دیتاست انجام می دهید بعد در جدول می ریزید این کار زمان زیادی نمی بره
    شما در به طور میانگین چند رکورد رو روش عملیات انجام می دهید ؟؟؟

  8. #8
    کاربر دائمی
    تاریخ عضویت
    شهریور 1382
    محل زندگی
    هلند
    پست
    1,709
    نقل قول نوشته شده توسط art2000ir مشاهده تاپیک
    ببیند شما اطلاعات رو از بانگ می خونید میریزید توی دیتاست بعد عملیات رو روی دیتاست انجام می دهید بعد در جدول می ریزید این کار زمان زیادی نمی بره
    شما در به طور میانگین چند رکورد رو روش عملیات انجام می دهید ؟؟؟
    سلام
    میشه یه مثال بزنید . چطوری تو دیتاست بریزم. من مستقیم با دستور insert into هر بار در بانک میریختم

  9. #9
    کاربر دائمی
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    تهران
    پست
    147

    CON1 =
    New SqlConnection
    CON1.ConnectionString = newgold.My.Settings.connectionstring
    DA.SelectCommand =
    New SqlCommand("Select * From Serials where Serial_Code= " & "'" + code.Text + "'", CON1)
    DA.Fill(DS,
    "Serials")

    شما به اینن وسیله اطلاعات مورد نظر رو از بانک می خوانید و در دیتاست قرار میدهید
    DS = دیتاست
    DA=دیتا ادابتر

    newrow.Item(
    "Serial_other") = nj.Text

    به وسیله دیتا رو هم اطلاعا ت را پردازش می کنید
    اگه کافی نبود دقیقا بفرماییئ چه رکوردهائی دارید و جه عملیاتی باید روی ان انجام دهید تا بتوانم دقیق تر نمونه کد دراختیار شما قرار دهم

  10. #10
    کاربر دائمی
    تاریخ عضویت
    شهریور 1382
    محل زندگی
    هلند
    پست
    1,709
    نقل قول نوشته شده توسط art2000ir مشاهده تاپیک

    CON1 = New SqlConnection
    CON1.ConnectionString = newgold.My.Settings.connectionstring
    DA.SelectCommand = New SqlCommand("Select * From Serials where Serial_Code= " & "'" + code.Text + "'", CON1)
    DA.Fill(DS, "Serials")

    شما به اینن وسیله اطلاعات مورد نظر رو از بانک می خوانید و در دیتاست قرار میدهید
    DS = دیتاست
    DA=دیتا ادابتر

    newrow.Item("Serial_other") = nj.Text

    به وسیله دیتا رو هم اطلاعا ت را پردازش می کنید
    اگه کافی نبود دقیقا بفرماییئ چه رکوردهائی دارید و جه عملیاتی باید روی ان انجام دهید تا بتوانم دقیق تر نمونه کد دراختیار شما قرار دهم
    سلام
    مرسی دوست عزیز اینها را امتحان میکنم . این مراحل رو من تماما انجام میدادم فقط به حای اینکه با fill در دیتاست بریزم در بانک میریختم. حال بعد از اینکه هر بار با fill به دیتاست رفت آخرسر باید با دستور .ExecuteNonQuery() در بانک ذخیره بشه درسته دیگه ؟
    من هر بار برای ذخیره از دستورات زیر استفاده میکردم
    Try
    'con_excel = New OleDbConnection(ExcelProvider)
    'con_excel.Open()
    cmd_excel = New OleDbCommand(insertsql, con_excel)
    Application.Lock()
    cmd_excel.ExecuteNonQuery()
    Application.UnLock()
    Catch ex As Exception
    Me.AlertMsg(ex.Message)
    EndTry

  11. #11
    کاربر دائمی
    تاریخ عضویت
    شهریور 1382
    محل زندگی
    هلند
    پست
    1,709
    سلام
    از شیوه فوق نتوانستم استفاده کنم . من تکه کدی که اسلاعات را از اکسل خوانده و در اکسس ذخیره میکنه را مینویسم .
    یکسری شماره را در comment ها قرار دادم برای توضیحات
            Try
    Dim sqlSend As String
    '< 1 >---
    Me.CreateWorkSheet(Trim(FileCode))
    ExcelProvider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Trim(SavePath) & "Res_" & Trim(FileCode) & ".xls" & ";" + "Extended Properties=Excel 8.0;"
    con_excel = New OleDbConnection(ExcelProvider)
    con_excel.Open()
    '< 2 >---
    For iCount As Byte = LBound(AllVragen) To UBound(AllVragen)
    '< 3 >---
    sqlSend = "SELECT " & AllVragen(iCount) & " AS " & AllVragen(iCount) & ","
    sqlSend = sqlSend & " COUNT(" & AllVragen(iCount) & ") AS Resultaat, " ' Vraag count
    sqlSend = sqlSend & " ROUND(Resultaat * 100 / " & recCount - MissRecord(iCount) & ",1) AS Percentage," ' Percentage 1
    sqlSend = sqlSend & " ROUND(Resultaat * 100 /" & recCount - MissRecord(iCount) & ",5) AS NPercentage" ' Precentage 5
    'sqlSend = sqlSend & " Percentage AS Cumulatieve" ' Cumulatieve 1
    sqlSend = sqlSend & " FROM " & Trim(FileCode)
    sqlSend = sqlSend & " WHERE " & AllVragen(iCount) & " IS NOT NULL "
    sqlSend = sqlSend & " GROUP BY " & AllVragen(iCount)
    Me.DataGridViewFillingU(dgvUser, sqlSend, Trim(FileCode))
    '< 4 >---
    NewSql = "INSERT INTO " & Trim(FileCode) & "(Vraag, Resultaat, FPrecentage, SPrecentage, Cumulatieve) VALUES ( ' ', ' ', ' ', ' ', ' ')"
    Me.InsertINTOWorkSheet(NewSql)
    If dgvUser.Rows.Count > 0 Then
    For id As Integer = 0 To dgvUser.Rows.Count - 1
    NewSql = "('" & dgvUser.Rows(id).Cells(0).Text & "','" ' vraag
    NewSql = NewSql & dgvUser.Rows(id).Cells(1).Text & "','" ' Resultaat
    NewSql = NewSql & dgvUser.Rows(id).Cells(2).Text & "','" ' Percentage 1
    NewSql = NewSql & dgvUser.Rows(id).Cells(3).Text & "','" ' Percentage 5
    Cum = Cum + dgvUser.Rows(id).Cells(3).Text
    NewSql = NewSql & Math.Round(Cum, 1) & "')" ' Cumulatieve
    Co1 = Co1 + dgvUser.Rows(id).Cells(1).Text
    Co2 = Co2 + dgvUser.Rows(id).Cells(2).Text
    Co3 = Co3 + dgvUser.Rows(id).Cells(3).Text
    NewSql = "INSERT INTO " & Trim(FileCode) & " (Vraag, Resultaat, FPrecentage, SPrecentage, Cumulatieve) VALUES " & NewSql
    '< 5 >---
    Me.InsertINTOWorkSheet(NewSql)
    Next
    '< 6 >---
    NewSql = "INSERT INTO " & Trim(FileCode) & " (Vraag, Resultaat, FPrecentage, SPrecentage, Cumulatieve) VALUES ( 'tataal', '" & Co1 & "', ' " & Co2 & "', ' " & Co3 & "', ' ')"
    Me.InsertINTOWorkSheet(NewSql)
    '< 7 >---
    NewSql = "INSERT INTO " & Trim(FileCode) & " (Vraag, Resultaat, FPrecentage, SPrecentage, Cumulatieve) VALUES ( 'missing', '" & recCount - Co1 & "', ' ',' ' , ' ')"
    Me.InsertINTOWorkSheet(NewSql)
    Co1 = 0 : Co2 = 0 : Co3 = 0 : Cum = 0
    End If
    Next
    con_excel.Close()
    Catch ex As Exception
    Me.AlertMsg(ex.Message)
    End Try


    کامنت 1 : یک worksheet در اکسس ایجاد میکند
    کامنت 2 : قبلا نام فیلدهای اکسس را در آرایه ذخیره کرده ام و در این قسمت همه جداول خوانده میشوند
    کامنت 3 : اطلاعات از بانک اکسس خوانده شده و یکسری محاسبات روی آن انجام میشود و در datagridview نمایش داده میشود.
    کامنت 4 : توسط دستور insert into و تابع Me.InsertINTOWorkSheet(NewSql) یک خط خالی در اکسس ایجاد میشود و اطلاعات از datagridview دوباره خوانده شده و در سطر بعد اکسس با دستور Me.InsertINTOWorkSheet(NewSql) ذخیره میشود.
    کامنت 6 : مقادیر مجموع بدست آمده در بانک اکسس ذخیره میشود.
    کامنت 7 : یک خط خالی در اکسس ذخیره میشود.

    حال به نظر شما چکار میتوان کرد که اینهمه مراجعه به بانک اکسل نداشته باشیم ؟

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •