View Full Version : دستور create table
mahak_f
دوشنبه 09 مرداد 1385, 06:57 صبح
سلام. در برنامه من که با VB 6 و بانک SQL نوشتم بعد از اضافه کردن مشخصات هر ماشین به بانک باید جدولی به نام خود ان ماشین در بانک ساخته شود. نام بانک همان کدی است که کاربر به عنوان کد ماشین در TextBox مربوط به ان وارد می کند. در زمان اجرا از اسم بانک که من انرا از TextBox.Text برمیدارم ایراد میگیرد با این عنوان که Incorrect Syntax near '768' (768 در اینجا مثلا کدی است که کاربر وارد کرده.) دستور SQL برنامه را به این صورت نوشته ام :
sakhte_table = "create table "+ TextBox.Text + " (codem nvarchar(10),coderan nvarchar(20),codeoto nvarchar(20),time nvarchar(8))))"
لطفا به من کمک کنید. خیلی وقت کم دارم....
mzjahromi
دوشنبه 09 مرداد 1385, 07:07 صبح
سلام دوست عزیز
البته من هنوز با پروژه شما آشنا نیستم ولی فکر میکنم طراحی بانکتون یه مشکلی داره که مجبور هستید این شکلی جدول ایجاد کنید.
در مورد مشکلت هم بهتره تو بخش VB مطرح کنی
mahak_f
سه شنبه 10 مرداد 1385, 07:21 صبح
نه این بخاطر مشکل در طراحی بانک نیستش. ماهیت برنامه اینه که به صورت پویا با اسمی که کاربر وارد میکنه جدول بسازه. با این فرض به من کمک کنید...
majid_afra222
سه شنبه 10 مرداد 1385, 08:18 صبح
سلام. در برنامه من که با VB 6 و بانک SQL نوشتم بعد از اضافه کردن مشخصات هر ماشین به بانک باید جدولی به نام خود ان ماشین در بانک ساخته شود. نام بانک همان کدی است که کاربر به عنوان کد ماشین در TextBox مربوط به ان وارد می کند. در زمان اجرا از اسم بانک که من انرا از TextBox.Text برمیدارم ایراد میگیرد با این عنوان که Incorrect Syntax near '768' (768 در اینجا مثلا کدی است که کاربر وارد کرده.) دستور SQL برنامه را به این صورت نوشته ام :
sakhte_table = "create table "+ TextBox.Text + " (codem nvarchar(10),coderan nvarchar(20),codeoto nvarchar(20),time nvarchar(8))))"
لطفا به من کمک کنید. خیلی وقت کم دارم....
سلام
اول اینکه این چرا انقدر پرانتز بسته داره، 2 تاش اضافیه (Incorrect Syntax near ) هم همین رو میگه
دوم اینکه چون از تکست باکس میخونی دستور رو اینجوری بنویس :
sakhte_table = "create table ["+ TextBox.Text + "] (codem nvarchar(10),coderan nvarchar(20),codeoto nvarchar(20),time nvarchar(8))"
این باید کار کنه،
Kamyar.Kimiyabeigi
سه شنبه 10 مرداد 1385, 08:24 صبح
از این sp استفاده کن و فقط نام جدولتو بهش پاس بکن
CREATE PROCEDURE ST_CRTTBL @TBLNAME NVARCHAR(100)
AS
EXECUTE ('CREATE TABLE [DBO].[' + @TBLNAME + '] (CODEM NVARCHAR(10),
CODERAN NVARCHAR(20),
CODEOTO NVARCHAR(20),
[TIME] NVARCHAR(8))')
mahak_f
سه شنبه 10 مرداد 1385, 09:37 صبح
من واقعا از کمکتون متشکرم. مشکل من با همون [ باز و بسته دور اسم بانک حل شد. ممنونم....
AminSobati
سه شنبه 10 مرداد 1385, 09:55 صبح
دوست عزیزم،
من هنوز شک دارم کاری انجام میدین (ساخت جداول بصورت Dynamic) واقعا انتخاب درستی باشه. چون در اینصورت تمام Queryها و دستورات ویرایشی هم باید Dynamic ساخته بشن. ضمنا وقتی Queryها به این شکل باشه، امکان Reuse شدن Execution Planها رو از دست میدین و همیشه Queryهای شما باید Compile بشن.
Dynamic ساختن جداول در صورتی مقبوله که مثلا شما امکان Develop کردن دیتابیس رو به کاربر بدین و در کل برنامه شما بشه یک واسط برای نوشتن Stored Procedureها و .... یعنی چیزی شبیه به Enterprise Manager
mahak_f
چهارشنبه 11 مرداد 1385, 08:46 صبح
Develop کردن دیتابیس دقیقا امکانیه که قرار هستش توی این برنامه پیاده شه. همینجور که اشاره کردید تمام Query ها هم به صورت دینامیک هستن.
از دقتتون متشکرم.
emad4000
چهارشنبه 11 مرداد 1385, 12:29 عصر
من واقعا از کمکتون متشکرم. مشکل من با همون [ باز و بسته دور اسم بانک حل شد. ممنونم....
من چندین بار از این دستور استفاده کردم بدون اینکه کروشه بزارم و تا به حال مشکلی نداشتم . کسی نمی دونه علت اینکه مشکل ایشون رفع شد چیه ؟
و یه سوال دیگه ، آیا اسم جدول می تونه Space داشته باشه ؟ یعنی بین اسم Blank باشه ؟؟
majid_afra222
چهارشنبه 11 مرداد 1385, 17:40 عصر
من چندین بار از این دستور استفاده کردم بدون اینکه کروشه بزارم و تا به حال مشکلی نداشتم . کسی نمی دونه علت اینکه مشکل ایشون رفع شد چیه ؟
و یه سوال دیگه ، آیا اسم جدول می تونه Space داشته باشه ؟ یعنی بین اسم Blank باشه ؟؟
سلام
[] یعنی اینکه نام Object جتی اگه شامل کارکترهای غیر مجاز هم بود، ایجاد بشه، این یه عمل متعارف توی اکثر DBMS ها هستش.
اگه تو [] بذاری میتونی Space هم تو نام اشیا داشته باشی.
AminSobati
چهارشنبه 11 مرداد 1385, 22:44 عصر
علاوه بر این، در SQL Server شما میتونین از علامت "" هم برای این منظور استفاده کنید به شرط اینکه SET QUOTED_IDENTIFIER فعال(ON) باشه:
SET QUOTED_IDENTIFIER ON
GO
USE Northwind
GO
SELECT * FROM "Order Details"
در صورتی که OFF باشه، از علامت "" برای Stringها میتونین استفاده کنین:
SET QUOTED_IDENTIFIER OFF
GO
DECLARE @Var1 VARCHAR(50)
SET @Var1="Hello"
emad4000
شنبه 14 مرداد 1385, 12:43 عصر
دستور قبلی ما Create Table بود و بانک SQL اصلا نمی تونه جدولی داشته باشه که تو اسمش بلانک باشه . پس چه جوری این دستور به صورت صحیح اجرا و جدول ساخته می شه ؟؟؟؟
AminSobati
شنبه 14 مرداد 1385, 21:29 عصر
با توجه به توضیحات چند پست قبلی، فکر میکنم نتیجه گیری به این شکل کاری سختی نباشه!
CREATE TABLE [Some Table](
C1 INT,
C2 INT)
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.