PDA

View Full Version : اختصاص یک جدول به کاربران برنامه



اصغر (پآچ)
شنبه 14 اردیبهشت 1387, 23:13 عصر
سلام من یه برنامه نوشتم که توش نامه های وارد شده به شرکت رو ثبت می کنیم (برنامه ای مثل دفتر اندیکاتور) حالا من می خوام توش یه کاربر جدید که اضافه می کنم توی بانک sql که دارم یه جدول به نام اون کاربر ایجاد بشه که شماره نامه های ارجاع شده به کاربر و وضعیت نامه ارجاعی و حداکثر تاریخ پاسخگویی به نامه و ..... ثبت بشه.
من می خوام کمکم کنید و دستوراتی که با اون بتونم اینکار رو انجام بدم بهم بدید من sql رو تازه شروع کردم و فقط از طریق enterprise manager می تونم باهاش کار کنم
راستی به نظر شما می تونم از این روشی که گفتم یک ایمیل داخل سازمانی هم تولید کنم؟ اگه روش بهتری دارید ممنون میشم کمکم کنید.

متشکرم

vcldeveloper
شنبه 14 اردیبهشت 1387, 23:45 عصر
یه جدول به نام اون کاربر ایجاد بشه که شماره نامه های ارجاع شده به کاربر و وضعیت نامه ارجاعی و حداکثر تاریخ پاسخگویی به نامه و ..... ثبت بشه.
هر کاربر یک جدول؟!! چطور ساختار بانک اطلاعاتی را طراحی کردید که به همچین ساختار عجیب و غریبی رسیدید؟!

Amir_Safideh
یک شنبه 15 اردیبهشت 1387, 08:33 صبح
و اگر برنامه شما صد کاربر داشته باشه درنتیجه شما صد جدول خواهید داشت فقط برای کاربران . بهتره که یک جدول برای لیست کاربران برنامه در نظر بگیرید و کد کاربران رو در جداول برنامه استفاده کنید .
---------
موفق باشید .

dkhatibi
دوشنبه 16 اردیبهشت 1387, 10:27 صبح
به حای اضافه کردن یک جدول برای هر کاربر. یک فیلد با کد کاربر به جداول اضافه نمایید.

اصغر (پآچ)
دوشنبه 16 اردیبهشت 1387, 22:30 عصر
برنامه من اینطوری که وقتی یه نامه ثبت میشه امکان اینکه براش حداکثر زمان پاسخگویی تعریف بشه رو داره که اگه به اون تاریخ برسیم تذکر بده که مهلت پاسخگویی به نامه شماره فلان امروزه! اگه یه کاربر وارد سیستم بشه توی صفحه Splash اون تذکر رو میده خوب اگه قرار باشه یک نامه به چند کاربر ارجاع داده بشه و هر کار بر موظف به پاسخگویی به نامه باشه من برای هر نامه یه فیلد گذاشتم که اگه به اون نامه پاسخ داده شد اون فیلد True بشه و دیگه اون پیغام هنگام ورود نمایش داده نشه!
با این فرض اگه یکی از اون چند نفر به اون نامه پاسخ داد دیگه اون تذکر برای بقیه که به نامه پاسخ ندادند نشون داده نمی شه و این یه عیب بزرگه!
بعدش من قبلا یه فیلد هم توی جدول ثبت نامه ها گذاشته بودم که شماره کاربرایی رو که بهشون ارجاع میشه رو توش ذخیره کنم اما اونجوری توی DBGrid که برای جستجوی نامه ها بکر گرفته بودم فقط کد کاربرها نمایش داده میشد و این یکم کار رو سخت میکنه که بفهمی الان نامه دست کیه یا باید کد تمام کاربران رو از حفظ باشی یا نمی دونم یه جوری این کدهارو تبدیل به اسم کاربران کنم

از راهنمایی های خوبتون ممنونم اگه ممکنه یه راه شدنی رو بهم پیشنهاد بدین

Accidentboy
دوشنبه 16 اردیبهشت 1387, 23:47 عصر
با سلام

شما می تونید 2 تا Table داشته باشید
یکی واسه پرسنلت و اون یکی

مثلا ErjaTable که تو این Table شماره نامه و کد فرستنده و گیرنده و تاریخ پاسخگویی رو بذاری
بغد بین دو تا Table جوین ببندی
Select p.name,e.code,e.date_res
from Personel p,ErjaTable e
and e.pers_code=p.pers_codeشماره نامه=where e.code

echoes
دوشنبه 16 اردیبهشت 1387, 23:50 عصر
برنامه من اینطوری که وقتی یه نامه ثبت میشه امکان اینکه براش حداکثر زمان پاسخگویی تعریف بشه رو داره که اگه به اون تاریخ برسیم تذکر بده که مهلت پاسخگویی به نامه شماره فلان امروزه! اگه یه کاربر وارد سیستم بشه توی صفحه Splash اون تذکر رو میده خوب اگه قرار باشه یک نامه به چند کاربر ارجاع داده بشه و هر کار بر موظف به پاسخگویی به نامه باشه من برای هر نامه یه فیلد گذاشتم که اگه به اون نامه پاسخ داده شد اون فیلد True بشه و دیگه اون پیغام هنگام ورود نمایش داده نشه!
با این فرض اگه یکی از اون چند نفر به اون نامه پاسخ داد دیگه اون تذکر برای بقیه که به نامه پاسخ ندادند نشون داده نمی شه و این یه عیب بزرگه!

جاي اينكه يك فيلد براي True كردن قرار بدي يك جدول تعريف كن كه ID نامه و ID كاربرايي رو كه ديدن ذخيره كنه و از روي اين جدول ميتوني بفهمي چه كسايي نديدند.


بعدش من قبلا یه فیلد هم توی جدول ثبت نامه ها گذاشته بودم که شماره کاربرایی رو که بهشون ارجاع میشه رو توش ذخیره کنم اما اونجوری توی DBGrid که برای جستجوی نامه ها بکر گرفته بودم فقط کد کاربرها نمایش داده میشد و این یکم کار رو سخت میکنه که بفهمی الان نامه دست کیه یا باید کد تمام کاربران رو از حفظ باشی یا نمی دونم یه جوری این کدهارو تبدیل به اسم کاربران کنم
از inner join‌توي دستور SQL استفاده كنيد.

اصغر (پآچ)
سه شنبه 17 اردیبهشت 1387, 23:22 عصر
از راهنمایی هاتون خیلی ممنونم اما...



بعد بین دو تا Table جوین ببندی
Select p.name,e.code,e.date_res
from Personel p,ErjaTable e
and e.pers_code=p.pers_codeشماره نامه=where e.code


من از این متغییر هایی که بکار بردین واقعا چیزی متوجه نشدم میشه یکم برام توضیح بدی؟:متعجب: :ناراحت: :خجالت: :افسرده: :گریه:



از inner join‌توي دستور SQL استفاده كنيد.


من طریقه استفاده از این دستور رو نمی دونم! میشه برام بگی دقیقا چه کاری انجام میده؟

من از کجا میتونم لیست دستورات sql و نوع کارکردشونو تهیه کنم؟ اگه کتاب خوب یا لینکی در این زمینه هم دارید بهم بدید

echoes
چهارشنبه 18 اردیبهشت 1387, 00:59 صبح
inner join باعث ميشه هرجا كه كد (كليد خارجي) باشه به جاي اون فيلد موئرد نظري نمايش داده شه، البته بايد ديتابيس صحيح طراحي شه باشه

SELECT tbGardesh.*, tbHesab.H_Onvan
FROM tbHesab INNER JOIN tbGardesh ON tbHesab.H_Code = tbGardesh.G_HCode;
در اين دستور تو جدول tbGardesh فقط كد حساب ذخيره شده و براي اينكه نام حساب نمايش داده شه از جدول tbHesab عنوان رو نمايش ميده. دقت كن كد حساب و نعنوان حساب هر دو توي جدول tbHesab هستند.

اصغر (پآچ)
یک شنبه 22 اردیبهشت 1387, 15:44 عصر
سلام ببین اگه من توی یک جدولم نامه هامو ذخیره کنم و توی یک جدول دیگه بیام شماره نامه و کد کاربری که نامه بهش ارجاع شده و یه فیلد که نشون بده کاربر به نامه جواب داده یا نه قرار بدم با دستور Inner Join وقتی که من شماره نامه ام رو بدم, اگه نامه به چند کاربر همزمان ارجاع شده باشه این دستور اینرجوین چند تا خروجی برای من پیدا میکنه تمامشون یا فقط یکی؟

Accidentboy
یک شنبه 22 اردیبهشت 1387, 17:59 عصر
از راهنمایی هاتون خیلی ممنونم اما...



من از این متغییر هایی که بکار بردین واقعا چیزی متوجه نشدم میشه یکم برام توضیح بدی؟:متعجب: :ناراحت: :خجالت: :افسرده: :گریه:





name =نام پرسنلت
Code=شماره نامت
Date_Res=تاریخ پاسخگویی

Accidentboy
یک شنبه 22 اردیبهشت 1387, 18:03 عصر
تمامی Record هایی که تو شرط ON باشه واست لیست می گیره

اصغر (پآچ)
یک شنبه 22 اردیبهشت 1387, 18:53 عصر
من نفهمیدم مگه چند تا رکورد رو میشه خواست؟

Accidentboy
یک شنبه 22 اردیبهشت 1387, 21:10 عصر
شماره نامه ام رو بدم, اگه نامه به چند کاربر همزمان ارجاع شده باشه این دستور اینرجوین چند تا خروجی برای من پیدا میکنه تمامشون یا فقط یکی؟

خودتون پرسیده بودین

SYNDROME
یک شنبه 22 اردیبهشت 1387, 21:36 عصر
سلام ببین اگه من توی یک جدولم نامه هامو ذخیره کنم و توی یک جدول دیگه بیام شماره نامه و کد کاربری که نامه بهش ارجاع شده و یه فیلد که نشون بده کاربر به نامه جواب داده یا نه قرار بدم با دستور Inner Join وقتی که من شماره نامه ام رو بدم, اگه نامه به چند کاربر همزمان ارجاع شده باشه این دستور اینرجوین چند تا خروجی برای من پیدا میکنه تمامشون یا فقط یکی؟
دوست عزیز حرف شما درست است ولی باید به این نککته توجه کنید که با توجه به ID کاربر اگر فیلتر را انجام دهید یک نامه را چند بار نمایش نمی دهد.
حتی می توانید لیست نامه ها را نمایش دهید و زمانی که روی آن دابل کلیک شد لیست را از جدول دوم بیاورد که نامه به چند نفر ازسال و وضعیت آن نمایش داده شود.
موفق باشید

اصغر (پآچ)
چهارشنبه 25 اردیبهشت 1387, 16:09 عصر
من دوتا DBGrid گذاشتم روی فرم و اولی رو به یک Table که به جدول نامه هام اشاره داره ارتباط دادم و دومی رو به یک Query , رویداد دابل کلیک DBGrid اول چه طوری تنظیم کنم که بیاد شماره نامه رو بگیره و در DBGrid دوم که به جدول ارجاعاتم اشاره داره ؛ نشون بده که نامه با اون شماره به چه کاربرایی ارجاع شده؟

من توی رویداد دابل کلیک این کد رو نوشتم:


with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT Serial, Assign, Status, Expired, ExpiredDate, Readed'
+ 'FROM Secretariat INNER JOIN'
+ ' Assings ON Secretariat.Serial = Assings.Serial';
Prepared;
Open;
end;

اما وقتی روی هر رکورد از DBGrid اول دابل کلیک میکنم فقط یک گزارش ثابت از DBGrid دوم دریافت می کنم اشکال دستور کجاست؟
-----------------------
متغییر های استفاده شده در این کد:
Secretariat: جدول نامه های ثبت شده , Assigns: جدول ثبت ارجاعات
Serial: شماره ردیف نامه ها , Assign: واحد (کاربر) ارجاع شده
Status: وضعیت نامه ( اتمام مراحل ارجاع , در دست اقدام)
Expired: نامه مهلت زمانی دارد ؟ , ExpiredDate: حداکثر مهلت پاسخگویی به نامه
Readed: نامه خوانده شده؟
ممنونم

اصغر (پآچ)
چهارشنبه 25 اردیبهشت 1387, 23:08 عصر
دوستان ممنونم از همتون مشکل رفع شد قربون همتون برممممممممممممممم