PDA

View Full Version : ساخت جدول جدید با ساختار جدول قدیم



sardar_ahmadi
چهارشنبه 24 مرداد 1386, 08:20 صبح
دوستان من با دلفی برنامه نویسی میکنم(دلفی 7) یه برنامه دارم که دیتا بیس آن اکسس است چگونه در آن جدول جدید بسازم یعنی ماه که عوض شد یک جدول جدید به اسم همان ماه بسازد. ضمنا اگر آن جدول به اسم همان ماه وجود دارد دیگر نسازد . من در دلفی برای DB جدول ساختم با کلید و ایندکسهای دوم.... ولی در اکسس بلد نیستم. لطفا راهنمائی نمائید .
یعنی اگر جدولی با نام 0586 وجود دارد جدول جدید با 0686 ساخته شود با همان ساختار. تشکر فراوان

mazoolagh
چهارشنبه 24 مرداد 1386, 20:57 عصر
من فکر میکنم ایجاد یک جدول مستقل برای هر ماه اشتباه هست. شما باید یک جدول کلی داشته باشین و فیلدی بهش اضافه کنین که نشوندهنده تاریخ مورد نظرتون باشه.

sardar_ahmadi
پنج شنبه 25 مرداد 1386, 09:35 صبح
با توجه به اینکه حجم فایل زیاد میشود . میخام اینکارو بکنم. متشکرم

mazoolagh
شنبه 27 مرداد 1386, 19:33 عصر
هرچند که روش شما اشکالش در آینده مشخص میشه ولی یک روش ساخت جدول با کد این شکلی هست:


currentdb.execute "create table XXX (FLD1 char, FLD2 integer)"

که XXX در این مثال اسم جدول هست و 2 فیلد FLD1 از نوع متنی و FLD2 از نوع Integer داره.

moustafa
شنبه 27 مرداد 1386, 21:19 عصر
برای کاستن حجم باید از کوئری استفاده کنی نه ایجاد جداول جدید با اینحال از روشهای زیر می تونی استفاده کنی :
1-با make table کوئری جدول محدود شده رو ایجاد کن
2-با copyobject از جدول کپی ایجاد کن اطلاعات اون رو با deletequery پاک کن
3-با terancferdatabase جدول را امپورت کن وبا rename اسم اون رو عوض کن
4-query/design/query/sql specific/data specific
با استفاده از دستورات create table همانطوری که دوستمون در پست قبلی گذاشتند و از help اکسس هم می تونی استفاده کنی

sardar_ahmadi
شنبه 19 آبان 1386, 12:54 عصر
دوستان چون ازقبل برنامه اینطوری طراحی شده که اطلاعات هر ماه در جدول ماه خودش باشد میخواهم اینکار را انجام دهم. پس میخواهم وقتی ماه را وارد کردم (مثلا 08) جدول kar8608 با ساختار ماه قبلی منتها خالی ساخته شود.

sardar_ahmadi
شنبه 26 آبان 1386, 00:07 صبح
دوستان حالا میخواهم اینطور بگویم که : من یک جدول دارم به نام m8608 میخواهم این جدول را کپی کنم با نام m8609 .چیکار کنم؟ یعنی هم جدول m8608 داشته باشم هم m8609 با تشکر

daskar
شنبه 26 آبان 1386, 07:50 صبح
با سلام
دوست عزیز
اگه امکان داره یه نمه راجب برنامه توضیح بده اصلاً برنامه شما قرار چه کاری انجام بده. اینطوری دوستان میتونن راحت تر کمک نمایند.
آیا برنامه شما قراره از اطلاعات ماهیانه ماه قبل یک کپی با دیتا به اطلاعات ماهیانه ماه جدید ایجاد نماید درست است .

sardar_ahmadi
شنبه 26 آبان 1386, 12:17 عصر
جناب Daskar من میخام یک جدول بسازم (با کد نه خودم بخواهم دستی جدول بسازم) که وقتی کاربر تاریخ را وارد کرد آن جدول ساخته شود مثلا نام جدول Master8608 باشد master که یک text پیش فرض است بقیه را از تاریخ بگیرد. کاربر تاریخ را وارد میکند اگر جدول وجود داشت ان جدول پیش فرض است وگر نه جدول جدید ساخته شود و به همین ترتیب در ماه بعد جدول Master8609 ساخته شود. همچنانکه در بالا توضیح داده ام دیتابیس من Access است و کدنویسی با دلفی. در ضمن از قبل برنامه اینطوری طراحی شده است امکان تغییر ساختار وجود ندارد. تشکر میکنم.

daskar
شنبه 26 آبان 1386, 13:47 عصر
دوست عزیز تو اکسس میتونی از کد زیر استفاده کنی

DoCmd.CopyObject , Text1.Value, acTable, "tbl001"


"جدول اصلی " , actable , "نام ماه مورد نظر ", docmd.copyobject

SYNDROME
شنبه 26 آبان 1386, 16:30 عصر
دوست عزیز تعداد رکوردهای شما در هر ماه چند تا است ؟
تعداد فیلدهای خود را نیز بگویید؟
موفق باشید

sardar_ahmadi
یک شنبه 27 آبان 1386, 09:56 صبح
جناب SYNDROME تعداد رکورهای هر جدول در هرماه حدود 20000 و هر جدول حدود 30 فیلد دارد

ضمنا من این کار را با دلفی در DB انجام داده ام بدون هیچ مشکلی.

daskar
یک شنبه 27 آبان 1386, 10:18 صبح
با سلام دوست عزیز مشکلت حل نشد با اون کد و نمونه !

sardar_ahmadi
دوشنبه 28 آبان 1386, 08:50 صبح
جناب Daskar همچنانکه قبلا عرض کردم سورس من دلفی است من با برنامه خودم در DB دلفی وقتی که تاریخ را میگیرد و تبدیل به شمسی میکند فایل ها را میسازد مانند : 8607 - 8608 و .... اما در َاکسس باید جدول ساخته شود نه فایل . یعنی اینکه وقتی اول برنامه تاریخ وارد میشود یا از سیستم میگیرد یک جدول با همان نام ساخته شود( 8608 - 8609-و.....) . جناب Daskar برنامه شما خوب بود اما اگر جدولی از قبل وجود داشته باشد و دوباره ساخته شود اطلاعات پاک میشوند . من میخواهم اگر جدول وجود داشت که هیچی اگر نداشت ساخته شود. البته اول اجرای برنامه. با تشکر

daskar
دوشنبه 28 آبان 1386, 12:05 عصر
دوست عزیز من برنامه رو به عنوان نمونه گذاشتم و تکمیل تست بودن یا نبودن رو بعهده خودت خودت گذاشتم برای تست کردن اینکه جدول قبلی موجود است یا نه فقط چند خط کد لازم داره برنامه قبلی رو تکمیل سپس upload میکنم

cybercoder
چهارشنبه 30 آبان 1386, 12:49 عصر
از یک پرس و جو با دستور Insert استفاده کن

sardar_ahmadi
یک شنبه 23 دی 1386, 12:26 عصر
جناب Daskar ضمن تشکر از شما و همه دوستانی که مشکل گشا هستند. ولی همچنانکه قبلا عرض کردم سورس من دلفی است نه Access این تکه برنامه در Access خوب کار میکنه اما در دلفی چه باید بکنم. که مثل همین Access جدول قبلی را عینا کپی کند منتها با نام دیگری.

daskar
یک شنبه 23 دی 1386, 13:51 عصر
دوست گرامی میتونی از دستورات sql تو delfi استفاده کنی
SELECT tbl.code, tbl.name, tbl.fame, tbl.[sh-sh], tbl.b_dat INTO gg FROM tbl;

بجای gg نام tbl رو فراخوانی کن که متونه داخل text box باشه و در کد sql دلفی بگذار
('SELECT tbl.code, tbl.name, tbl.fame, tbl.[sh-sh], tbl.b_dat INTO ' + Edit1.Text +
'FROM tbl;');

cybercoder
دوشنبه 24 دی 1386, 11:35 صبح
همون طور که عرض کردم با استفاده از دستور Insert به راحتی می تونی این کار رو انجام بدی
اینم Statement ش


Insert Into TableName (FieldName1, FieldName2) Select FieldName1, FieldName2 From TableName;

اینم کامل ترش


INSERT INTO target [IN externaldatabase] [(field1[, field2[, ...]])] SELECT [source.]field1[, field2[, ...] FROM tableexpression;