الان هم اینکار رو میکنه، بشرطی که دیتابیس مورد نظر در SQL Server Express رجیستر شده باشه و یا Attach اش کنید، بطوری که در Management Studio پس از اتصال به Instance مورد نظر قابل مشاهده باشه (تصاویر ضمیمه را مشاهده کنید).
الان هم اینکار رو میکنه، بشرطی که دیتابیس مورد نظر در SQL Server Express رجیستر شده باشه و یا Attach اش کنید، بطوری که در Management Studio پس از اتصال به Instance مورد نظر قابل مشاهده باشه (تصاویر ضمیمه را مشاهده کنید).
Management Studio من اول کار این error رو میده
System.IO.IOException: Cannot create a stable subkey under a volatile parent key.
آشنا نیست؟
اون مشکل رو رفع کردم اما الان تو برنامه شما وقت ساختن sp این پیغام رو میده.
جناب DelphiAssistant آیا امکان اضافه کردن قسمتی تحت عنوان SQl Statements Generator هم وجود داره مثل کاری که برنامه EazySQL انجام میده
آقای کرامتی تو برنامتون نام فیلدها را بین [] قرار بدهید
من یه برنامه نوشتم که sp را می گیره و کد C# تولید می کنه!
کسی خواست بگه.
آخرین ویرایش به وسیله e-shahshahani : دوشنبه 24 دی 1386 در 21:32 عصر دلیل: غلط املایی
در نسخه جدید برنامه بنده نیز این قابلیت گنجانده شده است، بطوری که هنگام تولید SP کد #C مناسب برای فراخوانی آن نیز تولید می شود.
حتما.
مگه نسخه کنونی کارهایی که اون برنامه انجام میده رو انجام نمیده؟ اگر قابلیت خاصی مد نظرتونه لطفا به تفصیل بیان کنید.
متن خطا کاملا در تصویر دیده نمی شود، لطفا خطای SQL ای که در پنجره Exception فوق نمایش داده میشود را بنویسید.
برنامه خیلی خوبیه...
ایرادی که من برخورد کردم اینه که User Defined DataType رو جواب نمیده.
و موضوع بعدی استاندارد نامگذاری اگر دست کاربر باشه خیلی بهتره!!!
و نهایتا پیشنهاد می دم این برنامه رو OpenSource کنید تا هر کس بتونه بسته به نیاز منطبقش کنه و برنامه هم خیلی سریع پیشرفت کنه... هر چند که تا حدی پیشنهاد بی شرمانه ای تلقی می شه!!! :)
یک مثال بزنید، منظورتون در SQL Server 2005 است؟ایرادی که من برخورد کردم اینه که User Defined DataType رو جواب نمیده
نامگذاری خود Stored Procedure ها منظورتونه؟استاندارد نامگذاری اگر دست کاربر باشه خیلی بهتره
حالا که مارو تنبل کردین میشه یه چیزیم تو این مایه ها هم بهش اضافه کنید
SET Transaction Isolation Level Serializable
BEGIN Tran
Begin Try
.
.
.
Commit tran
End TRY
BEGIN Catch
Rollback Tran
End Catch
SET Transaction Isolation Level read committed
حالا اختیاری هم میتونه باشه
حتما نسخه بعدی Form Generator هم داره دیگه؟ (بگو ان شاء الله!)
با سلام . و تشکر از زحمات فراوانتان .
یه پیشنهاد کوچیکم من داشتم .این که همه جوره داره مارو تنبل میکنه اگه Server Nameها رو هم خودش لیست کنه یا اونایی رو که قبلا وارد کردیم رو بیاره فکر کنم جالبتر بشه
موقع اتصال به من خطا میده :
مشکل من رفع شد !!
با Run as administrator اجراش کردم مشکلش حل شد ولی اگه یکم رو پردازش استثنا بیشتر کار کنی عالی میشه
ممنون از زحمتی که کشیدید.
زمانی که یک دیتابیس رو به SQL اضافه می کنیم ممکنه اسم اون رو به صورت کامل با مسیرش مینویسه مثل
E:\dbtest\db.mdf
حالا زمانی که من میخواستم از جداولش تو این برنامه استفاده کنم برنامه خطا میده
میشه تو SQL زمانی که میخواییم Atach کنیم Atach As اسمش رو درست کنیم
و مشکل برطرف میشه
فکر کنم با برنامه با \ های توی اسم DB مشکل پیدا میکنه
آن لحظه که تنها اعتبار کسی که مساله ای را مطرح کرده است، شما را در اشتباه بودن ایده هایتان قانع کرد،
آن لحظه،
لحظه وداع شما با دنیای خلاقیت و پیشرفت خواهد بود. . .
برنولی
دقیقا متوجه مشکل نشدم، لطفا بیشتر توضیح دهید.
اگه اسم دیتابیس طولانی باشه (مثلا اسم دیتابیس E:\dbtes\DBt\db.mdf باشه)
برنامه به DB وصل میشه جدولهاش رو هم نشون میده ولی نمیتونه از جداولش پروسیجر بسازه و Error میده
آن لحظه که تنها اعتبار کسی که مساله ای را مطرح کرده است، شما را در اشتباه بودن ایده هایتان قانع کرد،
آن لحظه،
لحظه وداع شما با دنیای خلاقیت و پیشرفت خواهد بود. . .
برنولی
اسم دیتابیس چرا باید اینطوری باشه؟ مگه اسم های رایجی که برای دیتابیس ها در SQL Server استفاده میشه چه مشکلی داره که اینطوری نامگذاری کنیم؟
من هم نمی خوام اسم DB اینطوری باشه
ولی گاهی وقتا هنگام Atach کردن یه DB به SQL Server پیشفرض خودش اینطوری اسم دهی می کنه غیر از اینکه خودمون موقع Atach کردن تغییرش بدیم (تو قسمت Atach As)
حالا اگه یادمون رفت تغیرش بدیم یا بلد نبودیم (مثه من) تکلیف چیه؟
ممنون
آن لحظه که تنها اعتبار کسی که مساله ای را مطرح کرده است، شما را در اشتباه بودن ایده هایتان قانع کرد،
آن لحظه،
لحظه وداع شما با دنیای خلاقیت و پیشرفت خواهد بود. . .
برنولی
ممنون از کارتون. منم قبلا از این برنامه ای که اضافه کردم استفاده می کردم یه Code Generator ساده هست که علاوه بر SPها، سایر layer ها رو هم تولید می کرد. ولی مگه همه Code Generator ها این کارها رو انجام نمی دن؟
برنامه کوچک و جمع و جوریه، اما چند تا اشکال داره:
در برنامه ای که من نوشتم سعی شده نواقص فوق وجود نداشته باشه.
- امکان سفارشی کردن کلاسها و SP ها رو نداره.
- استفاده اش از Microsoft Enterprise Library هم خوبه، هم بد، اشکالش در اینه که کتابخانه مورد استفاده روی همه سرورها نصب نیست.
- SP هاش خیلی استاندارد، و متنوع نیست.
روی تمام جدولهای من درست کار میکنه غیر از یک جدول ، زمانی که Generate رو روی اون جدول میزنم این خطا رو میده :
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.FormatException: Input string was not in a correct format.
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at SP_Gen.frmMain.a(String b, String b, DataRow[] b)
at SP_Gen.frmMain.a(Object b, EventArgs b)
at SP_Gen.frmMain.a(Object b, EventArgs b)
at System.Windows.Forms.ToolStripItem.RaiseEvent(Obje ct key, EventArgs e)
at System.Windows.Forms.ToolStripButton.OnClick(Event Args e)
at System.Windows.Forms.ToolStripItem.HandleClick(Eve ntArgs e)
at System.Windows.Forms.ToolStripItem.HandleMouseUp(M ouseEventArgs e)
at System.Windows.Forms.ToolStripItem.FireEventIntera ctive(EventArgs e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStripItem.FireEvent(Event Args e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEven tArgs mea)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Mes sage& m)
at System.Windows.Forms.ToolStrip.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.O nMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.W ndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
SP_Gen
Assembly Version: 1.0.7.0
Win32 Version: 1.0.7.0
CodeBase: file:///C:/Documents%20and%20Settings/Hosein/Desktop/sp_gen.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Web
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.Web/2.0.0.0__b03f5f7f11d50a3a/System.Web.dll
----------------------------------------
System.Xml
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Data
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.Data/2.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------
System.Configuration
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Transactions
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.Transactions/2.0.0.0__b77a5c561934e089/System.Transactions.dll
----------------------------------------
System.EnterpriseServices
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_32/System.EnterpriseServices/2.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll
----------------------------------------
Accessibility
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/Accessibility/2.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
----------------------------------------
************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.
اینم اسکریپت ایجاد جدولی که روش خطا میده :
USE [AA]
GO
/****** Object: Table [guest].[Pardakht] Script Date: 03/06/2008 01:03:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [guest].[Pardakht](
[ID] [int] IDENTITY(1,1) NOT NULL,
[IDCustomer] [int] NOT NULL,
[IDUser] [smallint] NOT NULL,
[Description] [varchar](max) COLLATE Arabic_CI_AS NULL,
[Statuse] [smallint] NOT NULL,
[date] [smalldatetime] NOT NULL,
CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
جدول رو تو یک دیتابیس جدید و خالی هم اضافه کردم و اونجا Generate کردم ولی باز هم همون خطا اومد
فکر میکنم این مشکل رو در نسخه جدید برطرف کرده باشم، چون با این نسخه ای که الان کار میکنم این Error رو روی جدولی که با Script فوق تولید کردم ندیدم.
نسخه جدید بزودی منتشر میشه.
جناب کرامتی کارت درسته خدایش
من به نوبه خودم تشکر می کنم
با سلام و تشکر از جناب کرامتی در مورد این نرم افزار کارامد
چرا برنامه شما 2 تا تکست باکس داره ؟
deldel del
آخرین ویرایش به وسیله amirepsilon : جمعه 30 فروردین 1387 در 18:31 عصر
با سلام
DelphiAssistant عزیز یه مدت زیادی من به این تاپیک سر نزده بودم، نسخه ی جدید برنامه ی شما رو تست کردم، واقعا دستت درد نکنه، خسته نباشید، عالیه، فقط دو تا ایده ی زیر رو اگه بتونی روش پیاده سازی کنی، عالی میشه :
1. امکان تعریف مقادیر Default برای انواع عددی و رشته ای
2. هنوز برنامه قادر به تشخیص Instance های نصب شده نیست، لطفا از این کد برای تشخیص Instance های نصب شده استفاده کنید :
try
{
DataTable servers = SqlDataSourceEnumerator.Instance.GetDataSources();
for (int i = 0; i < servers.Rows.Count; i++)
{
cmbInstances.Items.Add(servers.Rows[i]["ServerName"] + "\\" + servers.Rows[i]["InstanceName"]);
}
cmbInstances.SelectedIndex = 0;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
این کد، کلیه ی Instance های موجود در Network رو Detect میکنه.
موفق باشید.
با سلام
من همین الان این تاپیک رو کشف کردم
راستش میدونم که باید از دکمه تشکر استفاده میکردم اما با اون دکمه نمیشد همه حرفها رو زد
هنوز از این برنامه و قابلیتهاش استفاده نکردم ولی چیزی که از خود برنامه برام جالبتر والبته قابل تقدیرتر بود رفتار و مسئولیت پذیری و بزرگواری جناب دلفی اسیستنت بود واقعا فکر نمیکردم اینقدر آدم لارجی باشه
استاد دستت درد نکنه خیلی کارت درسته
با سلام
و تشکر فراوان از کار قشنگی که کردین
راستش دکمه تشکر رو زدم اما نتونستم به همون بسنده کنم وخواستم یک تشکر ویژه هم بابت این همه صبر و حوصله ای که به خرج دادین و به تک تک پیشنهاد ها و مشکلات دوستان پاسخ مناسب رو دادین و چنیدن نسخه از برنامه تان رو در اختیار همه گزاشتین ازتون تشکر کنم و سعی کنم این رفتار رو ازتون یاد بگیرم
با تشکر مجدد
با سلام خدمت استاد عزیزم
آقا عالی بود خیلی کار خوب و جلبیرو انجام دادید ممنون
DelphiAssistant عزیز یه نظر دیگه.
زمانی که Sp برای قسمت Insert ساخته میشه، برای نوع UniqueIdentifier اگه در قسمت Values از تابع new() استفاده بشه خیلی بهتره، چون اینطوری مجبوریم بعد از ساختن sp ها، این تیکه رو در بخش insert، به صورت دستی درست کنم، یه مثال برای روشنتر شدن مطلب میزنم، فرض کنید جدولی داریم که دو تا فیلد یکی از نوع uniqueidentifier و دیگری از نوع int هست، الان sp مورد نظر برای insert اینطوری ساخته میشه :
create proc sp_insert
@id uniqueidentifier,
@c2 int
as
insert tableName (id,c2) values(@id,@c2)
که به این صورت باید بشه :
create proc sp_insert
@c2 int
as
insert tableName (id,c2) values(newID(),@c2)
موفق باشید.
سلام
ببخشید . فقط میخواستم بگم اشتباه کردم . برنامه شما 4 تا تکست باکس داره
من از مطرح کردن این پست هیچ منظور بدی نداشتم .
فقط برام جالب بود . موفق باشید .
در ورژن بعدی این امکان رو غیرفعال میکنم، چون ضروری نیست. این از امکانات کد ادیتوری است که استفاده کردم.
همچنین، لازم به ذکره نسخه جدید برنامه با امکان تولید کلاس های لایه DAL و کلی امکانات جدید دیگه بهمراه سورس رو در اینجا منتشر کردم: http://www.codeplex.com/spgen
اگر نظری دارید خوشحال میشم بشنوم.
اگه میشه لینک دانلود ورژن جدید رو در همین جا بگذارید
2 تا باگ خیلی مهم :
1. زمانی که Primary Key جدول، int نباشه، زمانی که Proc برای Insert ساخته میشه، میاد یه فیلد identity رو میریزه توی یه مقدار int و بر میگردونه، در صورتی که فیلد PK ما اصلا Int نیست (اگه با خود sql server این استورد پروسیجر رو اجرا کنید و خروجی اون رو در یک متغیر بذارید و بعد اون متغیر رو Select کنید، این مطلب رو به شما نشون میگه که به جای Identity مورد نظر، 0 رو بر میگردونه).
2. عملیات Insert و Update در فیلدهای محاسباتی(Computed Columns) نباید انجام بشه(این فیلدها توسط خود Sql Server مقدار دهی میشه).
با احترام،
موفق باشید.
جالب بود ولی خوب ایراداتی هم داره
ولی چیزهایی که من دیدم چرا Exception ها درست Handle نشدن ؟
دوتا ارور داد و برنامه پرید بیرون
زمانی که سرویس Sql server بسته بود دیگری زمانیکه دیتا بیس موجود نبود که متاسفانه handle نشدن ;)
بعد String برای تولید کد :-o این کار یکم بچه گانه بود و از ادم بزرگی مثل شما بعیده ;) بهتره از معادلهایی که در دات نت هست استفاده کنید
(خوب احتمالا" نه 100% پستم پاک میشه :)) ولی خوب من وظیفه داشتم بگم)