سلام.
میخوام بدونم چطور میشه تعداد ستون های یک جدول دیتابیس رو از کاربر درون یک تکست باکس دریافت کرد و بعد یک Table با همون تعداد ستون در دیتابیس ایجاد کرد؟
سلام.
میخوام بدونم چطور میشه تعداد ستون های یک جدول دیتابیس رو از کاربر درون یک تکست باکس دریافت کرد و بعد یک 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 بهش اضافه كني. حتما اين كار را هم بكن. ضمن اينكه فيلدها همه از نوع عددي هستند. ميتوني اين را هم پارامتري كني
سلام. ممنون ولی من کد سی شارپ رو میخوام. یادم رفت بگم که دستورات باید به زبان سی شارپ باشه.
مثلا یکی از دوستان این تابع رو معرفی کرد ولی 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;
}
باید در بخش سی شارپ بپرسی
چون جزو دستورات SQL هست اینجا پرسیدم. توی بخش سی شارپ پرسیدم همون تابع رو بهم معرفی کردند ولی احتمالا مشکل داره که اجرا نمیشه. دستور زیر رو برای ایجاد جدول با 6 ستون نوشتم ولی حالا لازم دارم که یک Table با تعداد ستونهای مشخص که در یک تکست باکس نوشته میشه ایجاد بشه.
فکر میکنم سوال خیلی واضح هست . نمیدونم چرا کسی راهنمایی نمیکنه . من فقط میخوام این دستور SQL رو طور بنویسم که تعداد ستون هاش رو بشه از کاربردریافت کرد.
string strSql = @"CREATE TABLE TableName (1 Text,2 Text,3 Text,4 Text,5 Text,6 Text)";
جواب SReza1 تمیز تره ،
تابع ات هم تعداد ستونها رو دو تابیشتر از آنچه که کاربر می خواد در می آیره نام ستون آخر رو هم تکراری می اندازه ، i ات نمی دونم کجا داره پر می شه بهر حال فکر می کنم اگر حلقه for ات رو این شکلی بنویسی مشکلت حل شه :
(++for (int j = 1; j < ColumnsCount; j
درنهایت اگه حل نشد بایت برنامه رو تریس کنی ببینی در sqlstring ات با چه عبارتی پر میشه بعد اونو تو sql اجرا کنی ببینی مشکلش چیه.
ممنون ولی من دیتابیسم اکسس هست و SQL هم روی سیستم نصب نیست. حالا چطور از اون دستوراتی که آقا رضا نوشتن باید استفاده کنم ( در سی شارپ) یعنی باید این دستورات رو به شکل یک رشته بنویسم ؟
تابع رو هم به همون شکلی که شما گفتین تغییر دادم . ارور Syntax error in field definition میده. راستی این کلمه "Column" که توی تابع اومده در SQL یک کلمه کلیدی هست؟ میشه یکم در مورد اون تابع توضیح بدین که چطوری کار میکنه؟
آخرین ویرایش به وسیله va2012 : چهارشنبه 13 اردیبهشت 1391 در 10:44 صبح
تابعهه بازم اشکال داشت ، درستش کلاً میشه این :
stringInsertTable(intColumnsCount)
{
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 + ")";
returnSqlString;
}
من فیلدها رو int گرفتم می تونی هر چی می خوای بگیری ، این رو sql جواب می ده ولی رو access باید خودت تست کنی من access ندارم .
ممنون ولی وقتی این تابع رو فراخوانی میکنم و یک عدد مثلا 10 رو به عنوان ColumnsCount قرار میدم یک جدول با دو تا ستون که نام دو ستون Field 9 وField 10 هست می سازه و هر عدد دیگه ای هم بذارم دو تا ستون بیشتر تولید نمیشه فقط نامشون تغییر می کنه.
اینم عکس جدول :
5-1-2012 3-45-55 PM.png
خوب من خروجی این تابع رو برای یک عدد مثلا 10 حساب کردم شد این کد :
SqlString = @"CREATE TABLE T1 (""Field" + 9 + " Text,""Field" + 10 + " Text"")";
از این کد مشخصه چرا فقط دو تا ستون درست میکنه. پس باید تابع رو تغییرداد. دلیش هم اینه که حاصل اون حلقه For میشه Field " 9 " و این قسمت به کد خط بعد که حاصلش Field " 10 " هست اضافه میشه و همیشه یک مقدار ثابت رو بر می گردونه که همون کد بالایی میشه.