PDA

View Full Version : مشکل با جدیدترین فیلد اضافه شده در دیتا بیس برحسب تاریخ



golnaz99
چهارشنبه 22 فروردین 1386, 10:44 صبح
سلام
ببینید من میخواهم وقتی هر فیلد جدید به دیتا بیس اضافه میشود تاریخ اضافه شدن اون فیلد هم به دیتا بیس اضافه شود.من از تابع زیر برای یافتن تاریخ هر روز استفاده میکنم.
Dim mydate As DateTime = DateTime.Now
من میخواهم بدونم اولا چرا وقتی من نوع فیلد را در دیتا بیس datetime مشخص میکنم mydate در دیتا بیس ذخیره نمیشود و خطا میدهد ولی با varchar خطا نمیدهد.

سوال بعدی این است که من میخواهم به جدید ترین فیلدهای اضافه شده به دیتا بیس دسترسی داشته باشم .ایا استفاده از فیلد تاریخ برای این کار مناسب است؟
اگه بخواهم به جدیدترین تاریخ و مثلا 4 تاریخ قبل از ان دسترسی داشته باشیم چیکار باید بکنیم؟
و این سوال برای من به وجود اومده است وقتی این برنامه روی هارد اجرا میشود تاریخ سیستم را میدهد حالا وقتی بر روی سرور اینترنت اجرا میشود هم تاریخ سیستم را میدهد؟
اگه تاریخ سیستم غلط باشد تکلیف چی میشه؟
البته شاید من دارم اشتباه میکنم.اگه راه بهتری دارید من را راهنمایی کنید

Alireza_Salehi
چهارشنبه 22 فروردین 1386, 10:59 صبح
البته نگفتید چطوری تاریخ رو اضافه می کنید ، اما باید موقع اضافه کرد تاریخ (به صورت رشته ای) در دو طرف آن علامت # قرار دهید.

بله...

برای گرفتن 5 تا تاریخ آخر یک کوئری با شرط تاریخ ایجاد کنید که نزولی مرتب بشه ، با استفاده از کلمه TOP میتونید 5 تای اولش رو بردارید(5 تاریخ که از همه جدید تر هستند).

وقتی روی اینترنت اجرا بشه تاریخ سرور در نظر گرفته میشه نه سیستم شما_ سرور هم تاریخش همیشه درسته مگر این که بلایی سرش بیاد.

اگر هم تاریخ غلط باشه خوب غلط ثبت میشه!

سفید برفی
چهارشنبه 22 فروردین 1386, 11:39 صبح
سلام
شما میتونید از تابع getdate استفاده کنید.خوب در این صورت باید حتما ستون مورد نظر را از جنس datetime تعریف کنید و دیگر نیاز به یک متغیر مثل mydate هم نخواهید داشت و کافی است در دستور insert مقدار ستون را برابر با تابع getdate قرار دهید.
علاوه بر مرتب کردن جدول به شیوه بالا میتوان جدول اصلی را بر حسب همون ستونی که تاریخ در اون ثبت میشه به صورت نزولی مرتب کرد(با استفاده از ایندکس ها).

golnaz99
چهارشنبه 22 فروردین 1386, 13:03 عصر
یعنی تابع GETDATE را به صورت زیر در دستور INSERT قرار دهیم.


insertsql = "insert into kala(name,date)"
insertsql &= "values('" & txtname.Text & "','" & "getdate()" & "')"

البته این کد خطا میدهد.

ghabil
چهارشنبه 22 فروردین 1386, 13:16 عصر
همونطوری که خودت نوشتی GETDATE تابع هست ، تابع رو که نباید بزاری توی '( کتیشن)

golnaz99
چهارشنبه 22 فروردین 1386, 13:40 عصر
وقتی من این تابع را بدون کوتیشن قرار دادم خطا میده که این تابع تعریف نشده است البته من میدونم که قرار دادن تابع در کوتیشن اشتباه است
چرا تابع را نمیشناسد؟
در ضمن از بقیه دوستانی هم که راهنمایی کردند ممنون هستم

ghabil
چهارشنبه 22 فروردین 1386, 15:13 عصر
دیتابیس SQLServer هست دیگه؟

golnaz99
چهارشنبه 22 فروردین 1386, 15:58 عصر
دیتابیس SQLServer هست دیگه؟
بله sqlserver2005 است ولی خود چه ربطی به کدهای vb.net دارد

iman_22a
چهارشنبه 22 فروردین 1386, 19:47 عصر
اگر قبل از بکاربردن Getdate() در کد خود آن را در Query Analizer مربوط به Sql Server 2005 تست کنید چنین پیام خطایی می دهد :



Could not find stored procedure 'getdate()'
ولی به این صورت :



select getdate()
ساعت و تاریخ جاری نمایش داده میشود ، نمی دونم آیا توی کدتون میشه ایگونه عمل کرد . تست کنید بد نیست .

Alireza_Salehi
چهارشنبه 22 فروردین 1386, 21:21 عصر
برای اضافه کردن تاریخ جاری سیستم راه های زیر وجود داره:

1. استفاده از DefaultValue در SQLServer : کافیه در SQlServer (موقع طراحی جدول) و در فیلد مورد نظر در قسمت DefaultValue بنویسید getdate() و در هنگام افزودن رکورد جدید این فیلد رو در نظر نگیرید. تاریخ به صورت اتوماتیک اضافه خواهد شد.


Dim con AsNew SqlConnection(ConfigurationManager.ConnectionStrin gs("ConnectionString").ConnectionString)
Dim s AsString = Now.ToString()
Dim cmd AsNew SqlCommand("INSERT INTO mytable (id) VALUES (28)", con)
con.Open()
cmd.ExecuteNonQuery()
con.Close()


2. استفاده از تابع getdate() خود SQLServer در دستور Insert :



Dim con As New SqlConnection(ConfigurationManager.ConnectionStrin gs("ConnectionString").ConnectionString)
Dim cmd As New SqlCommand("INSERT INTO mytable (id,datetimefield) VALUES (29,getdate())", con)
con.Open()
cmd.ExecuteNonQuery()
con.Close()


3. استفاده از تابع DateTime.Now دات نت در دستور Insert :



Dim con As New SqlConnection(ConfigurationManager.ConnectionStrin gs("ConnectionString").ConnectionString)
Dim cmd As New SqlCommand("INSERT INTO mytable (id,datetimefield) VALUES (30,@dt)", con)
cmd.Parameters.Add("@dt", Data.SqlDbType.DateTime).Value = Now
con.Open()
cmd.ExecuteNonQuery()
con.Close()



حالا هر کدومش رو راحت ترید استفاده کنید!

ghabil
چهارشنبه 22 فروردین 1386, 21:21 عصر
بله sqlserver2005 است ولی خود چه ربطی به کدهای vb.net دارد

GetDate تابع SqlServer هست ولی اگر بخوای متونی بجای اینکه تاریخ رو از SQLServer بگیری از VB بگیری و بصورت پارامتر بزنی تو کدت.

golnaz99
پنج شنبه 23 فروردین 1386, 10:12 صبح
از دوستان عزیز ممنون هستم با استفاده از DefaultValue در SQLServer مشکلم حل شد.
بازم ممنون

golnaz99
پنج شنبه 23 فروردین 1386, 11:33 صبح
در ضمن یه سوال دیگه برای من پیش اومد اگه بخواهیم فقط ساعت را در دیتا بیس ذخیره کنیم باید چیکار کنیم؟

Pioneers
پنج شنبه 23 فروردین 1386, 14:32 عصر
use an specific field like string type and save...

golnaz99
جمعه 24 فروردین 1386, 19:42 عصر
use an specific field like string type and save...
میشه بیشتر توضیح بدهید
یعنی منظورتون این است که من یه نوع مثلا nvarchar تعریف کنم ومثلا مقدار اولیه ان را getdate تعیین کنم.البته این طوری که تاریخ هم ذخیره میشود.من میخواهم فقط ساعت ذخیره شود
خلاصه اگر بیشتر راهنمایی کنید ممنون میشوم

golnaz99
شنبه 25 فروردین 1386, 11:38 صبح
کسی راهنمایی نمیکنه؟

Alireza_Salehi
شنبه 25 فروردین 1386, 12:03 عصر
راهنمایی نداره که Pioneer خیلی واضح گفت!

توضیح بیشتر می خوای :
http://www.barnamenevis.org/forum/showthread.php?t=57128&highlight=%D3%C7%DA%CA


http://www.barnamenevis.org/forum/showthread.php?t=54820&highlight=%D3%C7%DA%CA

golnaz99
شنبه 25 فروردین 1386, 14:02 عصر
سلام
دوست عزیز این لینکی که فرستاده بودید با کد های sqlserver کار میکرد من میخواهم که با کد نویسی در vb.net کار کنم.البته این را هم بگم که من تاحالا کوری در sql server ننوشته ام.ولی در هر حال میخواهم که با vb.net کار کنم
شما میتونید من را راهنمایی کنید؟

golnaz99
چهارشنبه 29 فروردین 1386, 10:51 صبح
سلام
من تاحالا دستورات را در sqlserver اجرا نکرده ام و در تاپیک (نوع دادهای ساعت در sqlserver منظور این جمله را متوجه نشدم


اون دستورات رو تو SQL Server اجرا می کنی و بخشی از sp خواهد بود که کار با تاریخ رو انجام میدن.
تو vb مقدار ساعت اول و دوم رو میگیری به sp موجود روی SQL Server میفرستی.
اینم sp مورد نظر که تفاوت ساعت شروع تا پایان رو میده.


منظور از sp چیه؟
دستورت sqlserver را در کدوم قسمت باید اجرا کنیم(sqlserver2005)
چطوری بین دستورات sqlserver و vb ارتباط برقرار کنیم؟

Alireza_Salehi
چهارشنبه 29 فروردین 1386, 11:16 صبح
sp یعنی Stored Procedure .

یک راهش کد نویسیه بوسیله آبجکتهای موجود در System.Data.SqlClient ، راه دومش هم استفاده از ابزارهای ویژوال موجود در برگه Data از ToolBox!
آیا استفاده از SqlCommand و SqlConnection رو در VB.NET بلد هستید؟

در ضمن میشه بگید الآن چه جوری با دیتابیس کار میکنید؟

golnaz99
چهارشنبه 29 فروردین 1386, 12:47 عصر
سلام
ببینید من با کدهای که در vb.net نوشته میشود که مشکلی ندارم ولی مثلا کد زیر که در اون مثال گفته شده بود را نمیدونم چه طوری اجرا کنم.


CONVERT(varchar(20), date, 108) --Return hh:mm:ss
DATEADD(hh, 2, date)
CONVERT(varchar(20), date, 114) --Return hh:mi:ss:mmm(24h)

Alireza_Salehi
چهارشنبه 29 فروردین 1386, 13:37 عصر
اینها دستورات SQL هستند باید در Query مورد نظر اونها رو بنویسید، مثلا :


INSERT INTO [myTable] ([id],[mydate]) VALUES (1,CONVERT(varchar(20), date, 114))

بعد Query رو هر جور که بلدید اجرا کنید.