PDA

View Full Version : سوال: Cut شدن رکورد های Data Grid



Juventus FC
یک شنبه 09 شهریور 1393, 20:26 عصر
درود بر اساتید

من یک فرمی طراحی کردم که 3 تا Text داره که رکوردهایی که در این 3 تا Text نوشته میشه با زدن دکمه Start وارد یک Data Grid در همون فرم میشه ! حالا میخوام اطلاعاتی که در این Data Grid وارد شده و قابل مشاهده است با زدن دکمه Run وارد یک Data Grid دیگه در فرمی دیگه بشه و به نوعی این اطلاعات در Data Grid در فرمی دیگه کات بشه ! یا بازم به نوعی واضح تر رکورد ها از این جدودل Data Base به جدولی دیگه کات بشه !

* منظورم از کات شدن یعنی کپی رکورد ها به نوعی که اثری ازشون در Data Grid و جدول Data Base باقی نماند.

Juventus FC
دوشنبه 10 شهریور 1393, 16:28 عصر
تو این عکس کاملا مشخصه :

123227

میخواهم با زدن دکمه Run رکورد های موجود در Data Grid فرم 1 به Data Grid فرم 2 منتقل بشه و Data Grid فرم 1 خالی از رکورد بشه !

دوستان به شدت به راهنمایی شما نیاز دارم.

m.4.r.m
دوشنبه 10 شهریور 1393, 18:32 عصر
شما برای اینکه بتونی این کارو بکنی احتیاج به چیز خاصی ندارید ، با همون Adodb یا Adodc که اطلاعات رو داحل جدول ریختی در دیتا گرید دوم یک رشته اتصال دیگه درست کن و Datasource مربوط به Grid2 رو به رشته اتصال جدید قرار بدی خودش اطلاعات رو نشون میده

Juventus FC
سه شنبه 11 شهریور 1393, 00:25 صبح
شما برای اینکه بتونی این کارو بکنی احتیاج به چیز خاصی ندارید ، با همون Adodb یا Adodc که اطلاعات رو داحل جدول ریختی در دیتا گرید دوم یک رشته اتصال دیگه درست کن و Datasource مربوط به Grid2 رو به رشته اتصال جدید قرار بدی خودش اطلاعات رو نشون میده

خب نه ! دوست من دیگه تا این حد بلدم !

من میخوام با زدن اون دکمه Run رکورد ها در Grid 1 کلا پاک بشن و وارد Grid 2 بشن ! این اتفاق باید در مورد Table های موجود در SQL هم بیفته !

Juventus FC
چهارشنبه 12 شهریور 1393, 00:23 صبح
دوستان نیازمند کمک شما هستم ! کسی ایده ای نظری چیزی نداره !؟ یا کلا این روش نوعیه و من تنها کسی نیستم که نمیدونم باید چیکار کنم !؟

Juventus FC
چهارشنبه 12 شهریور 1393, 19:59 عصر
من یک کلکی بهش زدم و قطعه کدی نوشتم که در واقع ، وقتی کاربر روی دکمه Run کلیک میکنه ! رکورد های موجود در Data Grid همگی با هم پاک بشند ! اما این اتفاق میفته ولی یک run time error میده که نمیدونم برای چی به این گیر میده !

On Error Resume Next
Adodc1.Recordset.MoveFirst
Adodc1.Recordset.Delete
DataGrid1.Refresh
Adodc1.Refresh
Timer5.Enabled = True

بیشتر مواقع به این "Adodc1.Recordset.MoveFirst" گیر میده ! مشکل چیه !؟ و چه جوری باید رفعش کنم !؟

hmbarnamenevis
پنج شنبه 13 شهریور 1393, 14:42 عصر
نمی دونم چه برنامه ای دارید می نویسید که نیاز است اول اطلاعات در جدول موقتی ذخیره شود و بعد کاربر را ملزم کنید که با زدن Run اطلاعات به صورت دائم در جدول دیگر ذخیره شوند.
راه حل معقول برای این کار این است که شما می توانید از DataGrid هایی که اصلا به هیچ DataSource ی وصل نیستند ابتدا در فرم 1 نمایش دهید (مثل کنترل FlexGrid). بعد با زدن Run اطلاعات در جدول ثبت شوند و بعد در فرم دوم آنها را نمایش دهید.

m.4.r.m
پنج شنبه 13 شهریور 1393, 17:01 عصر
خوب واسه این کار انقدر کش و قوس لازم نیست :

اولین Dgrid به Adodc1وصل هستش دومین DGrid هم به Adodc2 باید وصل بشه در واقع هر دو Adodc باید به یک جدول اشاره کنن موقعی که ران رو میزنی Dgrid1 رو از Adodc1 جدا کن یعنی Datasource رو برابر "" کن و عمل رفرش رو انجام بده و Adodc2 رو فال کن و رفرش کن. انقدر سختی نداره

Juventus FC
پنج شنبه 13 شهریور 1393, 19:45 عصر
نمی دونم چه برنامه ای دارید می نویسید که نیاز است اول اطلاعات در جدول موقتی ذخیره شود و بعد کاربر را ملزم کنید که با زدن Run اطلاعات به صورت دائم در جدول دیگر ذخیره شوند.
راه حل معقول برای این کار این است که شما می توانید از DataGrid هایی که اصلا به هیچ DataSource ی وصل نیستند ابتدا در فرم 1 نمایش دهید (مثل کنترل FlexGrid). بعد با زدن Run اطلاعات در جدول ثبت شوند و بعد در فرم دوم آنها را نمایش دهید.

این دیتا گرید موقت چیه؟ من تا حالا چنین چیزی نشنیدم میشه بیشتر توضیح بدهید یا سورس چیزی برام بگذارید.


خوب واسه این کار انقدر کش و قوس لازم نیست :

اولین Dgrid به Adodc1وصل هستش دومین DGrid هم به Adodc2 باید وصل بشه در واقع هر دو Adodc باید به یک جدول اشاره کنن موقعی که ران رو میزنی Dgrid1 رو از Adodc1 جدا کن یعنی Datasource رو برابر "" کن و عمل رفرش رو انجام بده و Adodc2 رو فال کن و رفرش کن. انقدر سختی نداره

یعنی چی؟ میشه یه مثال بزنید؟ یک برنامه کوچک در این رابطه بنویسید تا من از رو اون یاد بگیرم. ممنونم.

m.4.r.m
پنج شنبه 13 شهریور 1393, 21:57 عصر
بفرما اینم نمونه سورس

Juventus FC
جمعه 14 شهریور 1393, 01:53 صبح
بفرما اینم نمونه سورس

آقا خیلی ممنون ! ولله گره ای از مشکلات من گشودی ! حالا یه سوال دیگه ! اگر اون Data Grid توی یک فرم دیگه باشه چی ؟ مثلا من Data Grid دوم تو فرم 2 !؟ بعد اینکه تو این مثال شما یک جدول هست و به صورت نمادین رکورد ها به Data Grid دوم میروند و با شروع دوباره برنامه رکورد ها سر جای اصلی بر میگردند !

من 2 تا جدول دارم مثل جدول شما مثل هم ! اما میخواهم Run که زده شدن رکورد ها برای همیشه به Data Grid دومی بروند !

ایلیا آخوندزاده
شنبه 15 شهریور 1393, 08:34 صبح
پروژه استاد عزیزم m.4.r.m کاری بود و ازشون تشکر میکنم. شما میتونید دوتا جدول درست کنید و وقتی تو datagrid1 اطلاعات وارد شد، در باتون run دستور اضافه کردن رکورد رو به adodc2 بدین و از adodc1 پاک کنین و درمورد اینکه به فرم دیگه ای ارسال بشه خیلی ساده میباشد فقط کافیه به جای شئ که در فرمی بعدی هست نام فرم رو قبل از شئ مورد نظربیارید.مثلا:
Form2.Adodc1.Refresh

Juventus FC
شنبه 15 شهریور 1393, 15:22 عصر
پروژه استاد عزیزم m.4.r.m کاری بود و ازشون تشکر میکنم. شما میتونید دوتا جدول درست کنید و وقتی تو datagrid1 اطلاعات وارد شد، در باتون run دستور اضافه کردن رکورد رو به adodc2 بدین و از adodc1 پاک کنین و درمورد اینکه به فرم دیگه ای ارسال بشه خیلی ساده میباشد فقط کافیه به جای شئ که در فرمی بعدی هست نام فرم رو قبل از شئ مورد نظربیارید.مثلا:
Form2.Adodc1.Refresh

میفهمم چی میگید ! اما هدف اینکه رکورد ها از Table 1 واقع در پایگاه داده به Table 2 انتقال پیدا بکنند !

الآن همین اتفاقاتی میگید شما در پروژه دوست خوبمون "m.4.r.m (http://barnamenevis.org/member.php?247494-m-4-r-m)" اعمال بکنید تا من منظور شما رو بهتر متوجه بشم !

ایلیا آخوندزاده
یک شنبه 16 شهریور 1393, 08:20 صبح
شما میخواین که اطلاعات گرید 1 برای همیشه و کلی به گرید 2 منتقل بشه؟ و گرید2 در فرم دیگه ای باز بشه؟
این کد اطلاعات جدول2 رو به جدول 1 با دستورات sql میریزه :
Dim DB As Database
Set DB = OpenDatabase(App.Path & "\db.accdb", True)
DB.Execute "INSERT INTO Table1 In '" & App.Path & "\db.accdb' SELECT * FROM Table2 "

Juventus FC
یک شنبه 16 شهریور 1393, 14:41 عصر
شما میخواین که اطلاعات گرید 1 برای همیشه و کلی به گرید 2 منتقل بشه؟ و گرید2 در فرم دیگه ای باز بشه؟
این کد اطلاعات جدول2 رو به جدول 1 با دستورات sql میریزه :
Dim DB As Database
Set DB = OpenDatabase(App.Path & "\db.accdb", True)
DB.Execute "INSERT INTO Table1 In '" & App.Path & "\db.accdb' SELECT * FROM Table2 "

برای من خط دوم Error میگیره ! مگه نباید برای اینکار از شی واسط پایگاه داده Adodc استفاده کرد ؟

مجید آرتا
یک شنبه 16 شهریور 1393, 18:39 عصر
برای من خط دوم Error میگیره ! مگه نباید برای اینکار از شی واسط پایگاه داده Adodc استفاده کرد ؟

بنده اطلاعات زیادی از پروگرمینگ ندارم
به نظرم باید db.accdb رو کنار فایل اجرایی قرار بدید تا مقادیرش لود شه

Juventus FC
دوشنبه 17 شهریور 1393, 00:56 صبح
بنده اطلاعات زیادی از پروگرمینگ ندارم
به نظرم باید db.accdb رو کنار فایل اجرایی قرار بدید تا مقادیرش لود شه

ولله من دیگه نمیدونم باید چیکار بکنم ! فکر نمیکردم این مشکل اینقدر پیچیده بشه که یک صفحه میگذره و مشکل من هنوز حل نشده !

ایلیا آخوندزاده
دوشنبه 17 شهریور 1393, 08:07 صبح
برای من خط دوم Error میگیره ! مگه نباید برای اینکار از شی واسط پایگاه داده Adodc استفاده کرد ؟

این دستور همانند دستور کپی میمونه و بین جدول های اکسس عمل میکنه درصورتی که نیاز به نمایش این اطلاعات داشته باشی خوب معلومه که باید از شئ adodc استفاده کنی.

ایلیا آخوندزاده
دوشنبه 17 شهریور 1393, 08:09 صبح
بنده اطلاعات زیادی از پروگرمینگ ندارم
به نظرم باید db.accdb رو کنار فایل اجرایی قرار بدید تا مقادیرش لود شه
این که شما میگید ربطی به انتقال نداره مگر اینکه دستورمون این باشه که فایل دیتابیس کنار پروژه هست که بدون اقدام جابجایی داده ها بی ثمره.

Juventus FC
دوشنبه 17 شهریور 1393, 13:32 عصر
این دستور همانند دستور کپی میمونه و بین جدول های اکسس عمل میکنه درصورتی که نیاز به نمایش این اطلاعات داشته باشی خوب معلومه که باید از شئ adodc استفاده کنی.

کاری به نمایش ندارم ! این دستور به خودی خود ! از کجا درک میکنه Data Base من کجاست ؟ چه جوری باید بهش وصل بشه و جداول و کپی کنه ؟ باید به وسیله یک شیئی چیزی به پایگاه داده وصل بشه! و این عمل انتقال و انجام بده ! آخه من نمیفهمم به خودی خود این دستور از کجا پایگاه داده و پیدا میکنه !

ضمن اینکه گفتم خط اول اون دستور Error میده ! شما هم هرچی التماس میکنم که یک نمونه کار با این دستور نشون من بدید ! ظاهرا اصلا این یک خط کامنت من و نمیخونید ! به هر حال ممنون از کمکتون. اما مشکل من یک ریال حل نشده !

Juventus FC
دوشنبه 17 شهریور 1393, 17:29 عصر
شما مبتدی هستین؟

من 3 سال پیش یا بیشتر کد نویسی میکردم ! بعدا دیگه بیخیالش شدم و الآن کارم بهش گیر کرده ! خیلی چیزا درست یادم نمیاد ! روی سورس برنامه ها که نگاه میکنم میفهمم چی به چی بوده ! این بخش و رد بکنم دیگه برنامم ردیف میشه ! البته تا حالا هم اصلا vb با پایگاه داده SQL به این صورت Join نکرده بودم و سابق با پایگاه داده access کار میکردم ! الان تنها امیدم این انجمن این تاپیک که دوستان ببینم راهنمایی میکنند یا خیر !

vbhamed
دوشنبه 17 شهریور 1393, 21:00 عصر
سلام

به پايگاه داده به دو شكل ميشه وصل شد يكي با كامپوننت مثل Adodc و Data و روش ديگه با كدنويسي

در پاسخي كه دوستمون دادن از روش كد نويسي استفاده شده بنابراين نياز به شيء جداگانه روي فرم نيست، در حقيقت شيء مورد نظر (در اينجا شيء DB از نوع Database) داخل خود برنامه با كد ساخته ميشه، برنامه به خودي خود نمي‌فهمه ديتابيس كجاست، مسير فايل ديتابيس تو خط دوم بهش داده شده (App.path & "\db1.mdb")

فقط اينكه ميگين از خط اول اشكال مي‌گيره چون رفرنس كامپوننت به برنامه اضافه نشده، براي راحتي كار شما يك شيء Data (نه Adodc) از نوار ابزار روي فرم بزاريد و بعد حذفش كنيد، اينكار باعث ميشه رفرنس مورد نظر اضافه بشه و ديگه ايراد نگيره

كد زير هم كمي تكميل تر هستش كه ابتدا داده ها رو در جدول دوم درج مي‌كنه و سپس از جدول اول پاك مي‌كنه، ساختار Table1, Table2 هم بايد كاملا شبيه هم باشه
Private Sub Form_Load()

Dim db As Database

Set db = OpenDatabase(App.Path & "\db1.mdb", True)
db.Execute "INSERT INTO Table2 Select * From Table1"
db.Execute "Delete * From Table1"

db.Close

End Sub
فرم اولتون رو به Table1 و فرم دوم رو به Table2 متصل كنيد

فقط يه نكته اي تو پست آخر اشاره كردين كه دقيقا متوجه نشدم از بانك اكسس الان داريد استفاده مي‌كنيد يا Sql Server
در صورت استفاده از Sql Server كد بايد تغييراتي كنه

Juventus FC
دوشنبه 17 شهریور 1393, 21:58 عصر
در حال حاضر از SQL استفاده میکنم و برای این پایگاه داده میخواهم. اگر میشه کد های مربوط به SQL برام بگذارید.

ضمن اینکه من این و روی یک برنامه با پایگاه داده Access تست کردم اون شی data که گفتید اوردم بعد پاکش کردم ولی حالا به خط دوم گیر میده ! با اینکه هم نام پایگاه داده درسته هم اون data base اکسس درون همون پوشه بغل فایل پروژه است ولی بازم بهش گیر میده ! من مسیر و هم برای تعریف کردم بازم گیر میده !

vbhamed
سه شنبه 18 شهریور 1393, 07:02 صبح
سلام

ممكنه بانك اطلاعاتيتون از ورژنهاي بالاي اكسس باشه كه توسط Data پشتيباني نشه، خود Data هم ورژنهاي مختلف داره كه بايد از بالاترين ورژن استفاده بشه ولي معمولا با Ado مشكلي نداريد و نمونه اتصال با كد توسط ADODB (نه ADODC) هم تو اينترنت زياده كه باهاش به Sql هم مي‌تونيد متصل بشيد، بقيش هم كه ميشه دستورات Sql كه مشابه هم هستن، اينم يك نمونه، البته در اينجا هم براي اضافه شدن رفرنس مربوطه يك عدد شيء Adodc روي فرم بزاريد و بعد حذفش كنيد

Dim cn As New ADODB.Connection
cn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=DatabaseName;Data Source=ARMINA-PC\MSSqlServer"
cn.Open , "user", "pass"
cn.Execute "INSERT INTO Table2 Select * From Table1"
cn.Execute "Delete * From Table1"
cn.Close

Juventus FC
سه شنبه 18 شهریور 1393, 10:59 صبح
آره دقیقا من از Microsoft Access 2007 استفاده میکنم برای همین پایگاه داده پیدا نمیکنه ! حالا کاری هم به Access ندارم !

این کدهای SQL به کار من میاد ، الآن همه چیز ردیف فقط الآن به خط 5 گیره میده اونجا که نوشتید => "cn.Execute "Delete * From Table1

و پیغام خطایی هم که میده تصویره زیر :


http://www.shiaupload.ir/images/46964296727319236169.jpg


که اونم یعنی نمیتونه رکوردها رو پاک بکنه ولی جالبی کار اینکه رکوردها به جدول دوم منتقل میشه ولی خب پاک نمیشه و در جدول اول باقی میمونه !

vbhamed
سه شنبه 18 شهریور 1393, 11:34 صبح
سلام
* رو از عبارت حذف كنيد، تو Sql server بعضا نبايد * داشته باشه
Delete From Table1

ایلیا آخوندزاده
سه شنبه 18 شهریور 1393, 12:11 عصر
این نمونه اکسس هستش که دوتا فرم داره :

Juventus FC
چهارشنبه 19 شهریور 1393, 01:29 صبح
سلام
* رو از عبارت حذف كنيد، تو Sql server بعضا نبايد * داشته باشه
Delete From Table1

در این جالت اصلا عمل حذف انجام نمیشه ! مثل اینکه اصلا VB این دستور و نمیخونه !

بعد یک سوال دیگه جدول 1 من جوری هستند که 5 تا پارامتر داره (code,name,number,buy,total) بعد من Code در هر این جدول کلید اصلی قرار دادم حالا در مواردی code های بعضی اجناس یکی میشه ! مثلا کارت گرافیک کدش 30 یک بار که وارد میکنیم خب مشکلی نیست ولی وقتی بار دوم کد 30 وارد میکنیم چون کد یک پارامتر منحصر به فرد vb پیغام خطا میده !

موردی نیست اصلا من کلید اصلی و مشخص نکنم !؟


این نمونه اکسس هستش که دوتا فرم داره :

خیلی ممنونم دوست من ! سپاسگذارم.

ایلیا آخوندزاده
چهارشنبه 19 شهریور 1393, 08:36 صبح
سلام و درود علت اینکه vb6 موقع ثبت کد در فیلد code خطا میده اینه که شما کلید primary key رو روی اون فیلد گذاشتید و این باعث میشه داده های تکراری ثبت نشه اگه این کلید رو از روش بردارید مشکل حل میشه.

Juventus FC
چهارشنبه 19 شهریور 1393, 11:20 صبح
میشه برای پاک کردن رکوردها از دستور زیر استفاده کرد ؟

On Error Resume Next
Adodc1.Recordset.MoveFirst
Adodc1.Recordset.Delete adAffectCurrent
DataGrid1.Refresh

منتها در این دستور در خط 4 که مربوط به Delete میشه VB پیغام خطا میده ! ولی فکر میکنم دستور همین باشه با اینکه پیغام خطا میده ولی فرمان پاک شدن اعمال میشه ولی اون Error چیه !

ایلیا آخوندزاده
چهارشنبه 19 شهریور 1393, 13:11 عصر
شاید کد زیر کارکنه :

On Error Resume Next
Adodc1.Recordset.MoveFirst
Adodc1.Recordset.Delete
adodc1.recordset.movelast
adodc1.refresh
DataGrid1.Refresh

Juventus FC
چهارشنبه 19 شهریور 1393, 13:29 عصر
حالا به خط چهارم گیر میده ! و عمل Delete اصلا انجام نمیشه !

ایلیا آخوندزاده
چهارشنبه 19 شهریور 1393, 14:03 عصر
خط دوم رو حذف کنید ببیند میشه؟

aliwer
چهارشنبه 19 شهریور 1393, 14:12 عصر
ببخشید آقای iliaoffice1 این کدی که نوشتید:
adodc1.recordset.movelast
چه فرقی با کد دوست عزیزمون که نوشتند داره ؟
Adodc1.Recordset.MoveFirst

ایلیا آخوندزاده
شنبه 22 شهریور 1393, 07:51 صبح
حالا به خط چهارم گیر میده ! و عمل Delete اصلا انجام نمیشه !
سلام و درود
شما یک دیتاگرید بیارید به فرم و خاصیت نمایش اون غیرفعال کنید. و فقط روی جدولی تنظیمش کنید که قراره عمل حذف انجام بشه ببینید بازم خطا میده؟

vbhamed
شنبه 22 شهریور 1393, 08:55 صبح
در این جالت اصلا عمل حذف انجام نمیشه ! مثل اینکه اصلا VB این دستور و نمیخونه !

منظور داخل همون عبارت بود، اين عبارت توسط موتور Sql استفاده ميشه نه VB و حتما هم بايد بانك Sql server باشه
cn.Execute "Delete From Table1"

vbhamed
شنبه 22 شهریور 1393, 09:01 صبح
ببخشید آقای iliaoffice1 این کدی که نوشتید:
adodc1.recordset.movelast
چه فرقی با کد دوست عزیزمون که نوشتند داره ؟
Adodc1.Recordset.MoveFirst

سلام
دستور اول به آخرين ركورد و دستور دوم به اولين ركورد حركت مي‌كنه

m.4.r.m
یک شنبه 23 شهریور 1393, 23:20 عصر
اینم انتقال اطلاعات از جدول 1 به جدول 2 و پاک کردن اطلاعات از جدول 1

یادآوری: قبل از تست برنامه اطلاعات Table2 رو حذف کنید و از ابتدا اطلاعات رو از طریق دکمه Start وارد جدول 1 بکنید سپس دکمه Run رو بزنید . ممنون