PDA

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



va2012
سه شنبه 12 اردیبهشت 1391, 10:08 صبح
سلام.

میخوام بدونم چطور میشه تعداد ستون های یک جدول دیتابیس رو از کاربر درون یک تکست باکس دریافت کرد و بعد یک Table با همون تعداد ستون در دیتابیس ایجاد کرد؟

SReza1
سه شنبه 12 اردیبهشت 1391, 10:24 صبح
سلام.

میخوام بدونم چطور میشه تعداد ستون های یک جدول دیتابیس رو از کاربر درون یک تکست باکس دریافت کرد و بعد یک Table با همون تعداد ستون در دیتابیس ایجاد کرد؟

فرض كن اسم جدول رو در متغير TableName و تعداد ستونها را در متغير FieldCount گذاشتي. حالا اينكه ميخواهي اينو پروسيجر كني و از تو برنامه C و يا دلفي پاس بدي با خودت



DECLARE
@TableName VARCHAR(100) ,
@FieldCount INT ,
@SQL VARCHAR(8000)

SET @TableName = 'YourTable'
SET @FieldCount = 5

SET @SQL = 'CREATE TABLE ' + @TableName + ' ('

WHILE @FieldCount > 0
BEGIN
SET @SQL = @SQL + 'F' + CAST(@FieldCount AS VARCHAR(2)) + ' [numeric](18, 0) ,'
SET @FieldCount = @FieldCount - 1
END

SET @SQL = @SQL + ')'

EXEC(@SQL)


GO


در ضمن جدولت كليد نداره و ميتوني خودت يك كليد از نوع identity بهش اضافه كني. حتما اين كار را هم بكن. ضمن اينكه فيلدها همه از نوع عددي هستند. ميتوني اين را هم پارامتري كني

va2012
سه شنبه 12 اردیبهشت 1391, 16:33 عصر
سلام. ممنون ولی من کد سی شارپ رو میخوام. یادم رفت بگم که دستورات باید به زبان سی شارپ باشه.

مثلا یکی از دوستان این تابع رو معرفی کرد ولی Error میداد :

string InsertTable(int ColumnsCount)
{
string SqlString = @"CREATE TABLE TableName" + i.ToString() + "(";
string Col = "";

for (int j = 0; j <= ColumnsCount; j++)
{
Col = Col + j.ToString() + "Column" + ",";

}

Col = Col + ColumnsCount.ToString() + "Column";
SqlString = SqlString + Col + ")";


return SqlString;
}

mohsen.net
سه شنبه 12 اردیبهشت 1391, 18:18 عصر
باید در بخش سی شارپ بپرسی

va2012
سه شنبه 12 اردیبهشت 1391, 18:54 عصر
باید در بخش سی شارپ بپرسی

چون جزو دستورات SQL هست اینجا پرسیدم. توی بخش سی شارپ پرسیدم همون تابع رو بهم معرفی کردند ولی احتمالا مشکل داره که اجرا نمیشه. دستور زیر رو برای ایجاد جدول با 6 ستون نوشتم ولی حالا لازم دارم که یک Table با تعداد ستونهای مشخص که در یک تکست باکس نوشته میشه ایجاد بشه.

فکر میکنم سوال خیلی واضح هست . نمیدونم چرا کسی راهنمایی نمیکنه . من فقط میخوام این دستور SQL رو طور بنویسم که تعداد ستون هاش رو بشه از کاربردریافت کرد.

string strSql = @"CREATE TABLE TableName (1 Text,2 Text,3 Text,4 Text,5 Text,6 Text)";

ma_barnamenevis
چهارشنبه 13 اردیبهشت 1391, 08:29 صبح
جواب SReza1 تمیز تره ،
تابع ات هم تعداد ستونها رو دو تابیشتر از آنچه که کاربر می خواد در می آیره نام ستون آخر رو هم تکراری می اندازه ، i ات نمی دونم کجا داره پر می شه بهر حال فکر می کنم اگر حلقه for ات رو این شکلی بنویسی مشکلت حل شه :
(++for (int j = 1; j < ColumnsCount; j
درنهایت اگه حل نشد بایت برنامه رو تریس کنی ببینی در sqlstring ات با چه عبارتی پر میشه بعد اونو تو sql اجرا کنی ببینی مشکلش چیه.

va2012
چهارشنبه 13 اردیبهشت 1391, 10:26 صبح
ممنون ولی من دیتابیسم اکسس هست و SQL هم روی سیستم نصب نیست. حالا چطور از اون دستوراتی که آقا رضا نوشتن باید استفاده کنم ( در سی شارپ) یعنی باید این دستورات رو به شکل یک رشته بنویسم ؟

تابع رو هم به همون شکلی که شما گفتین تغییر دادم . ارور Syntax error in field definition میده. راستی این کلمه "Column" که توی تابع اومده در SQL یک کلمه کلیدی هست؟ میشه یکم در مورد اون تابع توضیح بدین که چطوری کار میکنه؟

ma_barnamenevis
چهارشنبه 13 اردیبهشت 1391, 15:17 عصر
تابعهه بازم اشکال داشت ، درستش کلاً میشه این :
string InsertTable(int ColumnsCount)
{
string SqlString = @"CREATE TABLE " + txttablename.text + "(";
string Col = "";

for (int j = 1; j < ColumnsCount; j++)
{
Col = "Field" + j.ToString() + " int,";
}

Col = Col + "Field" + ColumnsCount.ToString() + " int";

SqlString = SqlString + Col + ")";
return SqlString;
}
من فیلدها رو int گرفتم می تونی هر چی می خوای بگیری ، این رو sql جواب می ده ولی رو access باید خودت تست کنی من access ندارم .

va2012
چهارشنبه 13 اردیبهشت 1391, 15:37 عصر
ممنون ولی وقتی این تابع رو فراخوانی میکنم و یک عدد مثلا 10 رو به عنوان ColumnsCount قرار میدم یک جدول با دو تا ستون که نام دو ستون Field 9 وField 10 هست می سازه و هر عدد دیگه ای هم بذارم دو تا ستون بیشتر تولید نمیشه فقط نامشون تغییر می کنه.

اینم عکس جدول :

86592

va2012
چهارشنبه 13 اردیبهشت 1391, 16:12 عصر
خوب من خروجی این تابع رو برای یک عدد مثلا 10 حساب کردم شد این کد :

SqlString = @"CREATE TABLE T1 (""Field" + 9 + " Text,""Field" + 10 + " Text"")";

از این کد مشخصه چرا فقط دو تا ستون درست میکنه. پس باید تابع رو تغییرداد. دلیش هم اینه که حاصل اون حلقه For میشه Field " 9 " و این قسمت به کد خط بعد که حاصلش Field " 10 " هست اضافه میشه و همیشه یک مقدار ثابت رو بر می گردونه که همون کد بالایی میشه.

va2012
چهارشنبه 13 اردیبهشت 1391, 17:18 عصر
تابعهه بازم اشکال داشت ، درستش کلاً میشه این :
string InsertTable(int ColumnsCount)
{
string SqlString = @"CREATE TABLE " + txttablename.text + "(";
string Col = "";

for (int j = 1; j < ColumnsCount; j++)
{
Col = "Field" + j.ToString() + " int,";
}

Col = Col + "Field" + ColumnsCount.ToString() + " int";

SqlString = SqlString + Col + ")";
return SqlString;
}
من فیلدها رو int گرفتم می تونی هر چی می خوای بگیری ، این رو sql جواب می ده ولی رو access باید خودت تست کنی من access ندارم .

آقا ممنون درست شد. مشکل از دوتا Space بود که بایدبین رشته ها قرار میگرفت. بازهم تشکر !