PDA

View Full Version : نمایش اطلاعات بدون لینک به بانک



MOR_MS
پنج شنبه 31 فروردین 1391, 13:22 عصر
با سلام خدمت اساتید بزرگوار
سئوال : چطور میشه اطلاعات یک بانک مثل SQL یا اکسس را بدونه اینکه لینکی صورت بگیره و یا جداول انها را وارد برنامه کنیم اطلاعات مندرج در بانک را با استفاده از کد نویسی در یک کئوری یا جدول و یا بهتر در یک لیست باکس داخل برنامه نمایش داد
به این صورت که مایک فرم در اکسس که برنامه اصلی است طراحی میکنیم که شامل یک لیست باکس یا subform جهت نمایش اطلاعات میزاریم یک دکمه هم برای ایجاد ارتباط و نمایش آن در لیست باکس یا subform قرار میدهیم که با زدن دکمه بین این برنامه و بانک SQL یکه رابطه برقرار شود ( نه بصورت لینک فیزیکی یا ایمپرت کردن جدولها) وبعد اطلاعات جدول مورد نظر را نمایش دهد
من این کد را برای درج اطلاعات استفاده کردم درسته بود
Dim conn As New ADODB.Connection
conn.Open "Provider=SQLNCLI10;Server=" & "10.11.12.133" & ";Database=test; Trusted_Connection=Yes;"
strSQL = "INSERT INTO Tab_B_CH_MAR(CHMR_COD_GOMROK,CHMR_SAL,CHMR_RADIF_C HEK,CHMR_RADIF_MARHALEH) Values ('" & Me.Text0 & "','" & Me.Text2 & "','" & Me.Text2 & "','" & Me.Text0 & "');"
conn.Execute strSQL
حال می خواهم از همین روش برای نمایش نیز استفاده کنم که موفق نشدم
خواهش میکنم دوستان راهنمای کنند
فکر کنم این روش بهتر از لینک باشه حداقل اینکه اطلاعات بصورت فیلتر شده و کمتر درخواست می شود

MOR_MS
پنج شنبه 31 فروردین 1391, 20:40 عصر
سلام

خواهش می کنم یک نفر کمکم کنه:گریه:

MOR_MS
جمعه 01 اردیبهشت 1391, 14:23 عصر
لطفا یک نفر راهنمایی کنه خواهش می کنم خیلی نیاز دارم

MOR_MS
جمعه 01 اردیبهشت 1391, 22:31 عصر
سلام
یکی کمکم کنه هر کاری می کنم نمی تونم تمام رکوردهای جدول مبدا را نمایش دهم

mazoolagh
شنبه 02 اردیبهشت 1391, 12:14 عصر
شما که ایجاد کانکشن رو بلدین، کافی هست یک رکوردست درست کنین و اطلاعات جدول مورد نظر رو در رکوردست بریزین.

البته یادآور باشم که اگر اینطوری میخواین کار کنین بهتر هست از همون اول با دات نت پیاده اش کنین!

MOR_MS
شنبه 02 اردیبهشت 1391, 13:58 عصر
سلام دوست عزیز اگه لطف کنین کدشو برام بنویسید ممنون میشم برای نوشت داد نت بخاطر اینکه برنامه باید برروی کمپیوترهای زیادی آن هم تویک اداره که تمام دسترسی ها را محدود کردن نصب بشه مشکل دارم که هم هزینه بره و وقت گیر بهترین روش همین برنامه اکسس است اگه لطف کنین کد نمایش اطلاعات را طبق پست قبلی برام بنویسید ممنون میشم

MOR_MS
یک شنبه 03 اردیبهشت 1391, 15:48 عصر
شما که ایجاد کانکشن رو بلدین، کافی هست یک رکوردست درست کنین و اطلاعات جدول مورد نظر رو در رکوردست بریزین.

البته یادآور باشم که اگر اینطوری میخواین کار کنین بهتر هست از همون اول با دات نت پیاده اش کنین!

باسلام
دوست عزیز mazoolagh (http://barnamenevis.org/member.php?9893-mazoolagh) من اگه طلاعات را در رکوردست بریزم برای نمایش کل آن توی یک کئوری یا لیست باکس چکار باید انجام بدم

amirzazadeh
یک شنبه 03 اردیبهشت 1391, 16:36 عصر
سلام
از اين لينك كمك بگيريد:
http://www.fontstuff.com/vba/vbatut10pfv.htm
...................
موفق باشيد

mazoolagh
یک شنبه 03 اردیبهشت 1391, 17:13 عصر
من یک نمونه براتون میگذارم ولی خودتون رو برای دردسرهای آینده آماده کنین!
بفرض اینکه اسم لیست باکس تون LISTBOX1 باشه و همونطور که خودتون نوشتین از SQL استفاده میکنین:

DIM CON AS NEW ADODB.CONNECTION
CON.PROVIDER="SQLNLI10"
CON.CONNECTIONSTRING="DATA SOURCE=...; INITIAL CATALOG=...; INTEGRATED SECURITY=SSPI"
CON.OPEN
DIM RS AS NEW ADODB.RECORDSET
SET RS.ACTIVECONNECTION=CON
RS.CURSORLOCATION=ADUSECLIENT
RS.SOURCE="SELECT ... FROM ... WHERE ..."
RS.OPEN

SET ME.LISTBOX1.RECORDSET=RS

RS.CLOSE
CON.CLOSE
SET RS=NOTHING
SET CON=NOTHING

MOR_MS
یک شنبه 03 اردیبهشت 1391, 21:01 عصر
سلام
دست شمادرد نکنه و همین طور استاد عزیز amirzazadeh (http://barnamenevis.org/member.php?47888-amirzazadeh)
دوتا سوال
1 - منظور از "دردسرهای آینده آماده کنین!" چیه ؟ آیا دارم کاربیهوده انجام میدم اگر میشه کمی راهنماییم کنید
2- میخواستم ببینم با این روش به نظر شماسرعت کار در 100 کامپیوتر تحت شبکه بالانمیره چون فکر می کنم با این روش دیگه کل اطلاعات بانک وارد برنامه اکسس نمیشه و فقط اطلاعات فیلتر شده درخواست میشه اگه اشتباه میکنم راهنمایی کنید بازم ممنونم از ازحمات شما دوستان که وقت گزاشتین

mazoolagh
دوشنبه 04 اردیبهشت 1391, 20:57 عصر
1- شما دارین یکی از نقاط قوت و مزایای اکسس که فرم های bound هست رو کنار میگذارین. یعنی تمام عملیات insert,update,delete و موارد مربوط به اون همراه با خیلی چیزهای دیگه رو خودتون باید کدنویسی کنین. البته تجربه خوبی هست!

2- خوشبختانه از sql استفاده میکنین و چون sql تمام پردازش رکوردها رو خودش انجام میده مطمئنا ترافیک شبکه بسیار کمتر خواهد بود و از این نگاه راهکار مناسبی انتخاب کردین. مشکل در انتخاب اکسس بعنوان اینترفیس هست. شما همین وقتی که دارین میگذارین برای کدنویسی vba رو vb.net بگذارین، پشیمون نمیشین.
اینکه در سازمان شما دسترسی ها محدود شده نباید باعث انتخاب روش نادرست بشه. شما یک installer درست میکنین و میدین به همون مدیر شبکه براتون نصب کنه - همونطور که افیس و چیزهای دیگه رو نصب میکنه.

MOR_MS
دوشنبه 04 اردیبهشت 1391, 21:43 عصر
سلام
با تشکر از شما دوست عزیز کاملا حق باشماست راستش باvb.net هم دارم کار می کنم اما بخاطر بعضی مسائل مجبورم فعلاً با این برنامه کار کنم اما همین که تجربه هم کسب می کنم امید وارم توی این مسیر دوستان کمک کنن
من فعلا با خود اکسس تو شبکه کار میکنم که بعلت بالابودن کاربرا خیلی کند شده ولی با این روش که امتحان کردم با این که بانکم هم اکسس بود ولی سرعت خیلی بالای نسبت به برنامه قبلیم داره حالا اگه بانک هم sql انتخاب بشه فکر کنم خیلی بهتر بشه فقط احتمالا توی گزارش گیری به مشکل برمی خورم که اگه بتونم با ایجاد یک جدول موقت و ریخت اطلاعات درونش شاید بشه این مشکل را حل کرد

MOR_MS
سه شنبه 05 اردیبهشت 1391, 00:45 صبح
سلام
کدی که بشه مستقم از اطلاعات sql گزارش اکسس ساخت چطوریه و این که چطور میشه اطلاعات sqlرا وارد جدول اکسس کرد

mazoolagh
سه شنبه 05 اردیبهشت 1391, 09:46 صبح
کدی که بشه مستقم از اطلاعات sql گزارش اکسس ساخت چطوریه
میتونین یک گزارش unbound بسازین و record source اون رو به همون رکوردست که خوندین منتسب کنین.
راحتتر هست که گزارش رو bound و بر اساس جدول لوکال بسازین و همه تست ها رو انجام و طراحی رو تکمیل کنین. پس از این کارها گزارش رو unbound کنین و ادامه کارهای بالا.


چطور میشه اطلاعات sqlرا وارد جدول اکسس کرد
از external data گزینه odbc database و بعد import و مابقی ماجرا

mazoolagh
سه شنبه 05 اردیبهشت 1391, 09:49 صبح
فقط احتمالا توی گزارش گیری به مشکل برمی خورم که اگه بتونم با ایجاد یک جدول موقت و ریخت اطلاعات درونش شاید بشه این مشکل را حل کرد
جدول موقت ساختن ایده خوبی نیست و هیچوقت هم بهش نیازی نخواهید داشت. همین سناریو sql رو ادامه بدین خواهید دید.

MOR_MS
سه شنبه 05 اردیبهشت 1391, 14:29 عصر
از external data گزینه odbc database و بعد import و مابقی ماجراسلام
ببخشید
منظورمن با استفاده از کدنویسی اطلاعات یک جدول sql را وارد جدول اکسس کنیم

MOR_MS
سه شنبه 05 اردیبهشت 1391, 15:06 عصر
میتونین یک گزارش unbound بسازین و record source اون رو به همون رکوردست که خوندین منتسب کنین.سلام
خسته نباشید من record source گزارش به همون رکوردست منتسب کردم ولی "record source" را اررور میگیره نمیدونم دیگه چکار باید بکنم اگه میشه کدشو برام بنویسید

MOR_MS
سه شنبه 05 اردیبهشت 1391, 20:46 عصر
سلام
کلافه شدم هرکاری میکنم اررور میده نمی دونم چکار کنم دوستان کمک کنن

mazoolagh
شنبه 09 اردیبهشت 1391, 12:42 عصر
دردسرهای بعدی که صحبتش شد بتدریج خودشون رو نشون میدن

اینکه رکورد سورس یک گزارش رو بتونین به یک رکوردست منتسب کنین فقط در adp شدنی است و در mdb,accdb نمیشه وگرنه کدش یکسان هست

بهتر هست روی sql server تون stored procedure و view تعریف و اونها رو بعنوان سورس گزارش استفاده کنین

MOR_MS
شنبه 09 اردیبهشت 1391, 19:23 عصر
باسلام و خسته نباشید
حق باشماست من برای اینکه چندتا گزارش بتونم درست کنم مجبور شدم ابتدا رکورد های بانک را داخل یک جدول بریزم و بعد گزارش گیری کنم و در پایان گزارش با بسته شدنش اطلاعات جدول را حذف کنم با همه این دردسرها ضاهراً توی شبکه که گستردگیش خیلی زیاد است خوب خواب میده البته هنوز من به یک بانک اکسس وصلم چون فعلا سرور SQL آماده نیست با این حال نسبت به برنامه قبلی که بصورت لینک بود خیلی خیلی بهتر شاید قابل مقایسه نیست

Abbas Amiri
شنبه 09 اردیبهشت 1391, 19:51 عصر
دوست عزیز mazoolagh (http://barnamenevis.org/member.php?9893-mazoolagh) ، آیا MOR_MS (http://barnamenevis.org/member.php?93908-MOR_MS) جهت کوئری موردنیاز خود ازقالب زیر بطریقی میتوانند استفاده کنند ؟


SELECT Field1, .....,Fieldn FROM Table IN [ODBC; DATABASE= defaultdatabase; UID=user; PWD= password;DSN= datasourcename] WHERE Condition

MOR_MS
یک شنبه 10 اردیبهشت 1391, 21:23 عصر
سلام
شما از این روش استفاده کردین؟
کد اتصال به بانک اکسس در شبکه در این روش چطوریه؟

mazoolagh
دوشنبه 11 اردیبهشت 1391, 13:06 عصر
دیشب در ارتباط با پست جناب امیری یک پست داشتم که الآن میبینم نیست! شاید یادم رفته ارسالش کنم.
دوباره مینویسم.

روش جناب امیری صددرصد شدنی هست ولی اونی که من بلدم syntax اش متفاوت هست و تابحال این مدل رو ندیده بودم.

SELECT .... FROM (ODBC; DRIVER=SQL SERVER; SERVER=...; DATABASE=...;) tablename

اگر هم که قبلا ODBC رو تعریف کردین
SELECT ... FROM (ODBC; DSN=...) tablename

البته فکر کنم آقای MOR_MS ترجیح میدن از ADO استفاده کنن تا ODBC

MOR_MS
سه شنبه 12 اردیبهشت 1391, 22:10 عصر
سلام
من این کد رو کجا و چطور باید استفاده کنم تا ااطلاعات رو توی کوری ببینم آیا مثال پست های قبل باید براش کانکشن بسازم

mazoolagh
چهارشنبه 13 اردیبهشت 1391, 08:49 صبح
این دیگه کد VBA نیست، دستور SQL هست: یعنی موقع طراحی کوئری SQL VIEW رو انتخاب میکنین.

و بدیهی هست که دیتابیس شما همون ACCDB میمونه

MOR_MS
چهارشنبه 13 اردیبهشت 1391, 18:38 عصر
سلام
یعنی من این دستور را SQL VIEW ایجاد کنم خوب برای اجرا همین دستور کافیه از چه طریقی به بانک وصل میشه من این دستور را همان طور که گفتین در قسمت SQL VIEW نوشتم و بعد از اجرا اررو مداد از دستو اشکال میگرفت
کار دیگه ای باید انجام بدم با این یاداوری که این برنامه را باید در بیش از 100 کامپیوتر کپی بشه و خود کار بران این کار را انجام میدن این گفتم چون فکرکردم باید برای اجرای این دستور بطور فیزیکی رابطه ای برقرار بشه نمی دونم ار ممکنه راهنمایی کنید که من چطور ی اطلاعات جدول tab1 را ز بانک bank1.mdb در یک کئوری بدون لینک نمایش بدم

MOR_MS
چهارشنبه 13 اردیبهشت 1391, 19:15 عصر
سلام
من دستور شمارو توی کوری اجرا کردم و این ارور را میده ایرا دستور نمی دونم چیه و این که برای نمایش اطلاعات اکسس (mdb) کدش برای این کار همینه؟ راستی در دستور جای ADO را با ODBC عوض کردم

mazoolagh
پنج شنبه 14 اردیبهشت 1391, 09:32 صبح
ببینین با این روش شما لازم نیست هیچ کانکشنی رو قبلش تعریف کنین. کانکشن در همون پرانتز جلوی FROM تعریف میشه. کافی هست CONNECTION STRING رو که از قبل تست کردین و کار میکرده در همین قالب بیارین.

MOR_MS
پنج شنبه 14 اردیبهشت 1391, 22:15 عصر
سلام
من هرکاری میکنم اررور میده نمی دونم مشکل کجاست کانکشن روی فرم درسته ولی توی کئوری جواب نمی ده اگه ممکنه یک نمونه از کئوری مورد نظر را درست کنین ممنون میشم

MOR_MS
شنبه 16 اردیبهشت 1391, 21:07 عصر
سلام
من واقعاً موندم طبق همان الگو کئوری را میسازم ولی جواب نمیده اگه ممکنه این دستورو برام شرح بدین نمی دونم کجا مشکل داره من فیلدهای جدول را انتخاب میکنم بعد نام جدول بعد از in هم جلوی مساوی DATABASE نام سرور وبعد سرورم یوزنیم وپسورد ندارد پس اینارو حذف میکنم و جلوی DSN هم نام دیتابس ایا باید از کارکتر های خاصی هم استفاده کنم یا نه لطفا راهنمایم کنید ، ایا جای ODBC چیز باید بنویسم یا نه

mazoolagh
یک شنبه 17 اردیبهشت 1391, 09:22 صبح
موقع ساختن کوئری ایراد میگیره یا موقع اجرا؟

اگر موقع ساختنش هست شاید لازم باشه از براکت استفاده کنین. اینجوری بنویسین:
SELECT ... FROM [ODBC; DSN=...].[tablename]

MOR_MS
یک شنبه 17 اردیبهشت 1391, 21:12 عصر
سلام
دست شما درد نکنه جواب داد (فوت کوزه گری) جالبه وقتی داخل کئوری تغیرات ایجاد مکنم یا رکوردی ثبت میشه همزمان در بانک هم این تغیرات اعمال میشه اگر بخوام فقط خواندنی بشه چکار باید کرد و اینکه مهمتر من هرکاری کردم برای بانک اکسس جواب نداد جای ODBC را هم ADO عوض کرم ولی کانکت نمیشه اگه میشه راهنمایی کنید برای اتصال به بانک اکسس چکار باید بکنم متشکرم

MOR_MS
سه شنبه 19 اردیبهشت 1391, 21:21 عصر
سلام
من وقتی با دستور بالا برای اتصال به بانک اکسس استفاده میکنم از من مسیر ذخیره شده ODBC را میخواد در صورتی که من نمی خوام از این طریق اتصال برقرار بشه می خوام همانطور که به SQL وصل میشه به اکسس هم وصل بشه تغیراتی که باید در دستور شما ایجاد کنم چطوری

MOR_MS
چهارشنبه 20 اردیبهشت 1391, 22:14 عصر
سلام
چرا این دستور برای بانک اکسس جواب نمیده

mazoolagh
پنج شنبه 21 اردیبهشت 1391, 09:57 صبح
1- آقا ODBC با ADO دو تکنولوژی جدا هستن و انتخاب اون در یک پروژه به معیارها و شرایطی برمیگرده که از حوصله این بحث و سواد من خارج هست. خلاصه اینجوری نیست که بجای ODBC بنویسیم ADO ! روش کار فرق میکنه.

2- اینکه با این روش نمیتونین به بانک اکسس وصل بشین منطقی هست چون ODBC در واقع برای ارتباط بین بانک های غیر همجنس هست و در این حالت هم فرض بر این هست که وقتی میشه مستقیما به جداول یک بانک اکسس دیگه لینک شد استفاده از ODBC چرخوندن لقمه دور سر هست!
اگر خیلی اصرار دارین به همین روش برین جلو باید آدرس فیزیکی دیتابیس رو بنویسین:
SELECT ... FROM [C:\...\...\DATABASEFILE.ACCDB].[tablename]

3- شما که قرار نیست کوئری رو در دسترس کاربر قرار بدین، قرار هست لایه زیری فرم یا گزارش باشه. پس این خواسته رو باید در فرم پیاده کنین (گزارش هم که نیازی نیست).
ولی معنیش این نیست که نمیشه: کافی RECORDSETTYPE رو از پیشفرض DYNASET به SNAPSHOT تغییر بدین.

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