View Full Version : سوال: تنظیم اطلاعات کمبو باکس با استفاده از تاریخ سیستم!+شماره فاکتور فروش تحت شبکه
ashkan1234
شنبه 11 شهریور 1391, 19:08 عصر
با عرض ادب و خسته نباشید!
دوستان دو تا سوال داشتم خدمتتون!
1- فرض کنید یک پرسنل رو داریم ثبت میکنیم!لیست این پرسنل بعد از ثبت شدن در دیتا بیس!از دیتا بیس دوباره خوانده شده و در یک DataCombo لیست میشوند.
حالا فرض کنید موقع ثبت هر پرسنل یک تاریخ انقضا کاربر برای آن پرسنل در نظر بگیرد!
وقتی تاریخ سیستم به آن روز رسید باید آن شخص دیگر در دیتا کمبو نمایش داده نشود!
چه روشی برای هیدن کردن پرسنل در آن تاریخ هست؟!!
با در نظر گرفتن ماژولی که در نرم افزار بکار گرفته ام(تاریخ شمسی)!
-------------------------
2-آیا راهی هست با استفاده از VB6 بشه نرم افزار تحت شبکه نوشت؟!
میخوام نرم افزار همچین کاری بکنه:
الف:اگر کاربر شماره 1 شروع کرد به زدن فاکتور شماره 1001(قبل از اینکه فاکتور را ذخیره کند)
کاربر شماره دو که همزمان در حال استفاده از نرم افزار است شماره فاکتورش بشه 1002
ب:اگر کاربر شماره 1 فاکتور شماره 1001را ذخیره کرد در دیتا بیس!
کاربر شماره دو که همزمان در حال استفاده از نرم افزار است شماره فاکتورش بشه 1002
کلا نمیدونم چطور میشه نرم افزار رو تحت شبکه نوشت!دوستان اگه بصورت مبتدی برام توضیح بدند ممنون میشم!
سپاس گذارم!
SlowCode
شنبه 11 شهریور 1391, 19:21 عصر
1- لازم نيست مخفيش كني، فقط از دستور Sql استفاده كن، مثلا:
AdoDc1.RecordSource="select * from Table where Month='" & CurrentMonth & "'"
اينجا تاريخ انقضاي كاربر رو مثلا توي Month نگه داري ميكنيم، و CurrentMonth هم ماه جاري است، واسه كمبوباكس هم براي ado بايد از Microsoft Data List 6 و براي Data از Microsoft DataBoundList استفاده كني و بعد RowSource و ListField رو تنظيم كن.
2- بله، ميشه فقط واسه اين چيزي كه ميخواي بايد يكم دقت به خرج بدي، اينجا (http://barnamenevis.org/forumdisplay.php?169-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%AA%D8%AD%D8%AA-%D8%B4%D8%A8%DA%A9%D9%87-%D8%AF%D8%B1-VB6) هم تاپيكشه و آموزش هايي زيادي توش هست.
ashkan1234
شنبه 11 شهریور 1391, 19:33 عصر
1- لازم نيست مخفيش كني، فقط از دستور Sql استفاده كن، مثلا:
AdoDc1.RecordSource="select * from Table where Month='" & CurrentMonth & "'"
اينجا تاريخ انقضاي كاربر رو مثلا توي Month نگه داري ميكنيم، و CurrentMonth هم ماه جاري است، واسه كمبوباكس هم براي ado بايد از Microsoft Data List 6 و براي Data از Microsoft DataBoundList استفاده كني و بعد RowSource و ListField رو تنظيم كن.
2- بله، ميشه فقط واسه اين چيزي كه ميخواي بايد يكم دقت به خرج بدي، اينجا (http://barnamenevis.org/forumdisplay.php?169-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%AA%D8%AD%D8%AA-%D8%B4%D8%A8%DA%A9%D9%87-%D8%AF%D8%B1-VB6) هم تاپيكشه و آموزش هايي زيادي توش هست.
1-اولی Microsoft DataBoundList و تنظیمات مربوط اش رو بلدم،ولی در مورد کدی که نوشتید زیاد متوجه نشدم!ای روال رو کجا باید اعمال کنم؟!!
مگه نباید اول مقایسه رو انجام بده بعد فیلترش کنه؟
ماه جاری رو سیستم چی جوری بر میگردون و با ماه ثبت شده مقایسه میکنه و فیلترش میکنه؟
2-لینکی که دادید باید سالها توش جستجو کرد!(اگه همچین تاپیکی بزنم اونجا خلاف قوانینه؟!!)
SlowCode
شنبه 11 شهریور 1391, 20:38 عصر
اين كد رو توي دكمه يا تكست باكس يا توي هر چيزي كه ميخواي جستجو كنه بنويس.
مگه نباید اول مقایسه رو انجام بده بعد فیلترش کنه؟
بله، اين دستور خودش همه كار ها رو انجام ميده.
ماه جاری رو سیستم چی جوری بر میگردون و با ماه ثبت شده مقایسه میکنه و فیلترش میکنه؟
شما بايد از يه ماجول يا shamsi dll استفاده كني كه تاريخ رو تبديل ميكنه، بعد وقتي ميخواي تاريخ انقضاي كاربر رو ثبت كني تاريخ اون روز رو توي Month ثبت ميكني، بعد وقتي كه جستجو ميكني تاريخ امروز رو تبديل ميكني و ماه رو توي متغير CurrentMonth ذخيره ميكني. بعدش هم نتيجه رو ميبيني.
توي سايت "تبديل تاريخ ميلادي به شمسي" رو بنويس و اون ماجول رو پيدا كن.
2-لینکی که دادید باید سالها توش جستجو کرد!(اگه همچین تاپیکی بزنم اونجا خلاف قوانینه؟!!)
نخير كافيه نحوه كار با وينسوك رو ياد بگيري، بعد بقيه كارها به عهده خودته. فعلا كار با server و client رو ياد بگير.
ashkan1234
یک شنبه 12 شهریور 1391, 12:53 عصر
اين كد رو توي دكمه يا تكست باكس يا توي هر چيزي كه ميخواي جستجو كنه بنويس.
بله، اين دستور خودش همه كار ها رو انجام ميده.
شما بايد از يه ماجول يا shamsi dll استفاده كني كه تاريخ رو تبديل ميكنه، بعد وقتي ميخواي تاريخ انقضاي كاربر رو ثبت كني تاريخ اون روز رو توي Month ثبت ميكني، بعد وقتي كه جستجو ميكني تاريخ امروز رو تبديل ميكني و ماه رو توي متغير CurrentMonth ذخيره ميكني. بعدش هم نتيجه رو ميبيني.
توي سايت "تبديل تاريخ ميلادي به شمسي" رو بنويس و اون ماجول رو پيدا كن.
نخير كافيه نحوه كار با وينسوك رو ياد بگيري، بعد بقيه كارها به عهده خودته. فعلا كار با server و client رو ياد بگير.
دادش من از یه ماژول بهتر استفاده میکنم!
یک نگاه به کد بنداز!ببین میتونی حلش کنی؟!!
الان اول باید وینسوک رو یاد بگیرم یا سرور و کلینت؟!!
دوتا مقاله در مورد کار با وینسوک گرفتم!
http://www.mediafire.com/?bu2yjja2r3ef2kn
SlowCode
یک شنبه 12 شهریور 1391, 13:07 عصر
آره ميتونم ولي خودت بايد درستش كني، من توضيحاتش رو دادم(وقت كد نويسي ندارم) ولي توي command1 فرم main كدهاي مربوط به select case رو پاك كن و اسم فيلدها رو به ترتيب به كمبوباكس اضافه كن و اين كد رو جايگزين كن:
SQL = "SELECT * FROM Table1 WHERE Left(" & Adodc1.Recordset.Fields(Combo1.ListIndex + 1).Name & "," & Len(Text1) & ")='" & Trim(Text1) & "'"
Adodc1.RecordSource = SQL
Adodc1.Refresh
ashkan1234
یک شنبه 12 شهریور 1391, 13:40 عصر
آره ميتونم ولي خودت بايد درستش كني، من توضيحاتش رو دادم(وقت كد نويسي ندارم) ولي توي command1 فرم main كدهاي مربوط به select case رو پاك كن و اسم فيلدها رو به ترتيب به كمبوباكس اضافه كن و اين كد رو جايگزين كن:
SQL = "SELECT * FROM Table1 WHERE Left(" & Adodc1.Recordset.Fields(Combo1.ListIndex + 1).Name & "," & Len(Text1) & ")='" & Trim(Text1) & "'"
Adodc1.RecordSource = SQL
Adodc1.Refresh
الان این کدی که قرار دادی به سوالم ربطی نداشت!(فکر کنم اینو واسه این گفتید که کد نویسیم کم بشه واسه قسمت سرچ!)درسته؟
داداش نمیخوام وقت بزاری کد نویسی کنی!
من همه کارهاشو کردم،همه اون کدهایی که گفتی رو زدم ولی جواب نمیده!همه دیتا بیس رو میبره تو DataCombo1!(در واقع کد هیچ کاری نمیکنه)
میخوام ببینم مشکل کجاست؟!
m.4.r.m
یک شنبه 12 شهریور 1391, 14:06 عصر
از این دستور استفاده کن :
Select Case Combo1.ListIndex
Case 0:
DateStr = J_TODAY(1)
t = "Sabt_Date='" & DateStr & "'"
Case 1:
DateStr = J_SUBDAY(J_TODAY(1), 1, 1)
t = "Sabt_Date<='" & J_TODAY(1) & "' AND Sabt_Date>='" & DateStr & "'"
Case 2:
DateStr = J_SUBDAY(J_TODAY(1), 3, 1)
t = "Sabt_Date<='" & J_TODAY(1) & "' AND Sabt_Date>='" & DateStr & "'"
Case 3:
DateStr = J_SUBDAY(J_TODAY(1), 7, 1)
t = "Sabt_Date<='" & J_TODAY(1) & "' AND Sabt_Date>='" & DateStr & "'"
Case 4:
DateStr = J_SUBDAY(J_TODAY(1), 30, 1)
t = "Sabt_Date<='" & J_TODAY(1) & "' AND Sabt_Date>='" & DateStr & "'"
Case 5:
DateStr = J_SUBDAY(J_TODAY(1), 90, 1)
t = "Sabt_Date<='" & J_TODAY(1) & "' AND Sabt_Date>='" & DateStr & "'"
Case 6:
DateStr = J_SUBDAY(J_TODAY(1), 180, 1)
t = "Sabt_Date<='" & J_TODAY(1) & "' AND Sabt_Date>='" & DateStr & "'"
End Select
اینم ماژول :
Option Explicit
'Option Base 0
Public GDayTab(2, 13) As Long
Public JDayTab(2, 13) As Long
Public Const GYearOff = 226894
Public Const Solar = 365.25
Public Const JWkDayOff = 3
Public Const GWkDayOff = 0
Function Jleap(Year As Long) As Long
Dim tmp As Long
tmp = Year Mod 33
If (tmp = 1 Or tmp = 5 Or tmp = 9 Or tmp = 13 Or tmp = 17 Or tmp = 22 Or tmp = 26 Or tmp = 30) Then
Jleap = 1
Else
Jleap = 0
End If
End Function
Function JDayOfYear(Year As Long, Month As Long, day As Long) As Long
Dim i As Long, leap As Long
leap = Jleap(Year)
For i = 1 To Month - 1
day = day + JDayTab(leap, i)
Next i
JDayOfYear = day
End Function
Function JLeapYears(jyear As Long) As Long
Dim leap As Long, CurrentCycle As Long, Div33 As Long, i As Long
Div33 = Int(jyear / 33)
CurrentCycle = jyear - (Div33 * 33)
leap = Div33 * 8
If CurrentCycle > 0 Then
i = 1
Do While i <= CurrentCycle And i <= 18
leap = leap + 1
i = i + 4
Loop
End If
If CurrentCycle > 21 Then
i = 22
Do While i <= CurrentCycle And i <= 30
leap = leap + 1
i = i + 4
Loop
End If
JLeapYears = leap
End Function
Function JalaliDays(jyear As Long, jmonth As Long, jday As Long) As Long
Dim TotalDays As Long
Dim leap, tmp As Long
leap = JLeapYears(jyear - 1)
tmp = JDayOfYear(jyear, jmonth, jday)
TotalDays = (jyear - 1) * 365 + leap + tmp
JalaliDays = TotalDays
End Function
Public Function GDayOfYear(Year As Long, Month As Long, day As Long) As Long
Dim i As Long, leap As Long
leap = Gleap(Year)
For i = 1 To Month - 1
day = day + GDayTab(leap, i)
Next i
GDayOfYear = day
End Function
Public Function FDate(Jdate As String) As String
Dim Year As String, Month As String, day As String
If Len(Jdate) < 8 Then
day = Right(Jdate, 2)
Month = Mid(Jdate, 3, 2)
Year = Left(Jdate, 2)
Else
day = Right(Jdate, 2)
Month = Mid(Jdate, 5, 2)
Year = Left(Jdate, 4)
End If
FDate = Year + "/" + Month + "/" + day
End Function
Public Function Gleap(Year As Long) As Long
If ((Year Mod 4 = 0 And Year Mod 100 <> 0) Or Year Mod 400 = 0) Then
Gleap = 1
Else
Gleap = 0
End If
End Function
Public Sub GMonthDay(GYear As Long, GDayOfYear, Month, day)
Dim i As Long, leap As Long
leap = Gleap(GYear)
i = 1
Do While GDayOfYear > GDayTab(leap, i)
GDayOfYear = GDayOfYear - GDayTab(leap, i)
i = i + 1
Loop
Month = i
day = GDayOfYear
End Sub
Public Function GregDays(GYear As Long, GMonth As Long, GDay As Long) As Long
Dim Div4 As Long, Div100 As Long, Div400 As Long
Dim TotalDays As Long, tmp As Long
Div4 = Int((GYear - 1) / 4)
Div100 = Int((GYear - 1) / 100)
Div400 = Int((GYear - 1) / 400)
tmp = GDayOfYear(GYear, GMonth, GDay)
TotalDays = (GYear - 1) * 365 + tmp + Div4 - Div100 + Div400
GregDays = TotalDays
End Function
Public Function GregorianDate(Jdate As String, Optional mode As String) As String
Dim jyear As Long, jmonth As Long, jday As Long
Dim GYear As Long, GMonth As Long, GDay As Long
Dim TotalDays As Long
jyear = Year_(Jdate)
If Len(Jdate) = 6 Then jyear = jyear + 1300
jmonth = Month_(Jdate)
jday = Day_(Jdate)
TotalDays = JalaliDays(jyear, jmonth, jday)
GregorianYMD TotalDays, GYear, GMonth, GDay
GregorianDate = YMD2Str(GYear, GMonth, GDay, mode)
End Function
Public Sub GregorianYMD(TotalDays As Long, GYear As Long, GMonth As Long, GDay As Long)
Dim Div4 As Long, Div100 As Long, Div400 As Long
Dim GDays As Long
TotalDays = TotalDays + GYearOff
GYear = Int(TotalDays / (Solar - 0.25 / 33))
Div4 = Int(GYear / 4)
Div100 = Int(GYear / 100)
Div400 = Int(GYear / 400)
GDays = TotalDays - (365 * GYear) - (Div4 - Div100 + Div400)
GYear = GYear + 1
If GDays = 0 Then
GYear = GYear - 1
If Gleap(GYear) Then
GDays = 366
Else
GDays = 365
End If
ElseIf (GDays = 366 And Gleap(GYear) = 0) Then
GDays = 1
GYear = GYear + 1
End If
GMonthDay GYear, GDays, GMonth, GDay
End Sub
Public Function YMD2Str(Year As Long, Month As Long, day As Long, Optional mode As String) As String
Dim Y As String, M As String, d As String
Y = LTrim(Str(Year))
M = LTrim(Str(Month))
If Len(M) <> 2 Then
M = "0" + M
End If
d = LTrim(Str(day))
If Len(d) <> 2 Then
d = "0" + d
End If
If mode = "" Then
mode = "SHORT"
Else
mode = UCase(mode)
End If
Select Case mode
Case "LONG"
YMD2Str = Y + M + d
Case Else
YMD2Str = Right(Y, 2) + M + d
End Select
End Function
Public Sub JalaliYMD(TotalDays As Long, jyear As Long, jmonth As Long, jday As Long)
Dim JDays As Long
Dim leap As Long
TotalDays = TotalDays - GYearOff
jyear = Int(TotalDays / (Solar - 0.25 / 33))
leap = JLeapYears(jyear)
JDays = TotalDays - (365 * jyear + leap)
jyear = jyear + 1
If JDays = 0 Then
jyear = jyear - 1
If Jleap(jyear) Then
JDays = 366
Else
JDays = 365
End If
ElseIf (JDays = 366 And Jleap(jyear) = 0) Then
JDays = 1
jyear = jyear + 1
End If
JMonthDay jyear, JDays, jmonth, jday
End Sub
Public Function Day_(Date_ As String) As Long
Day_ = CLng(Right(Date_, 2))
End Function
Public Function Month_(Date_ As String) As Long
Select Case Len(Date_)
Case 8
Month_ = CLng(Mid(Date_, 5, 2))
Case Else
Month_ = CLng(Mid(Date_, 3, 2))
End Select
End Function
Public Sub JMonthDay(jyear As Long, JDayOfYear As Long, Month As Long, day As Long)
Dim i As Long, leap As Long
leap = Jleap(jyear)
i = 1
Do While JDayOfYear > JDayTab(leap, i)
JDayOfYear = JDayOfYear - JDayTab(leap, i)
i = i + 1
Loop
Month = i
day = JDayOfYear
End Sub
Public Sub DateModuleSetup()
Dim i As Long
JDayTab(0, 0) = 0: JDayTab(1, 0) = 0
For i = 1 To 6
JDayTab(0, i) = 31
JDayTab(1, i) = 31
Next i
For i = 7 To 11
JDayTab(0, i) = 30
JDayTab(1, i) = 30
Next i
JDayTab(0, 12) = 29: JDayTab(1, 12) = 30
GDayTab(0, 0) = 0: GDayTab(1, 0) = 0
GDayTab(0, 1) = 31: GDayTab(1, 1) = 31
GDayTab(0, 2) = 28: GDayTab(1, 2) = 29
GDayTab(0, 3) = 31: GDayTab(1, 3) = 31
GDayTab(0, 4) = 30: GDayTab(1, 4) = 30
GDayTab(0, 5) = 31: GDayTab(1, 5) = 31
GDayTab(0, 6) = 30: GDayTab(1, 6) = 30
GDayTab(0, 7) = 31: GDayTab(1, 7) = 31
GDayTab(0, 8) = 31: GDayTab(1, 8) = 31
GDayTab(0, 9) = 30: GDayTab(1, 9) = 30
GDayTab(0, 10) = 31: GDayTab(1, 10) = 31
GDayTab(0, 11) = 30: GDayTab(1, 11) = 30
GDayTab(0, 12) = 31: GDayTab(1, 12) = 31
End Sub
Public Function Year_(Date_ As String) As Long
Select Case Len(Date_)
Case 8
Year_ = CLng(Left(Date_, 4))
Case Else
Year_ = CLng(Left(Date_, 2))
End Select
End Function
Public Function JalaliDate(GDate As String, Optional mode As String) As String
Dim GYear As Long, GMonth As Long, GDay As Long
Dim jyear As Long, jmonth As Long, jday As Long
Dim TotalDays As Long
GYear = Year_(GDate)
If Len(GDate) = 6 Then GYear = GYear + 1900
GMonth = Month_(GDate)
GDay = Day_(GDate)
TotalDays = GregDays(GYear, GMonth, GDay)
JalaliYMD TotalDays, jyear, jmonth, jday
JalaliDate = YMD2Str(jyear, jmonth, jday, mode)
End Function
SlowCode
یک شنبه 12 شهریور 1391, 14:11 عصر
بله واسه همين خاطر گفتم. بفرما:
Adodc1.RecordSource = "SELECT * FROM Table1 where year(TarikhEngheza) <= " & Year(To_Hejri(Date)) & " and month(TarikhEngheza) <= " & Month(To_Hejri(Date)) & " and day(TarikhEngheza) < " & Day(To_Hejri(Date))
Adodc1.Refresh
فقط يادت باشه وقتي جستجو ميكني اين شرط ها بايد توي اون هم باشه وگرنه افرادي كه تاريخ انقضاشون گذشته رو هم مياره.
ashkan1234
یک شنبه 12 شهریور 1391, 14:28 عصر
بله واسه همين خاطر گفتم. بفرما:
Adodc1.RecordSource = "SELECT * FROM Table1 where year(TarikhEngheza) <= " & Year(To_Hejri(Date)) & " and month(TarikhEngheza) <= " & Month(To_Hejri(Date)) & " and day(TarikhEngheza) < " & Day(To_Hejri(Date))
Adodc1.Refresh
فقط يادت باشه وقتي جستجو ميكني اين شرط ها بايد توي اون هم باشه وگرنه افرادي كه تاريخ انقضاشون گذشته رو هم مياره.
بهترین راه این بود که کد رو تو فرم لود بزارم!
داداش دستت درد نکنه!این الان درست جواب نمیده!
اول میره اونی که تاریخ انقضاش گذشته رو نشون میده!
فقط هم رو یک شخص فیلتر میشه!یعنی اگه ده نفر هم تاریخ انقضاشون گذشته باشه،فقط یک شخص در لیست باکس میاد!
بعدشم عرض کردم اونایی که تاریخشون گذشته نباید نمایش داده بشن!
ممنون!
m.4.r.m
یک شنبه 12 شهریور 1391, 15:21 عصر
Adodc1.RecordSource = "SELECT * FROM Table1 where year(TarikhEngheza) <= " & "%'" & Year(To_Hejri(Date)) & " and month(TarikhEngheza) <= " & Month(To_Hejri(Date)) & " and day(TarikhEngheza) < " & Day(To_Hejri(Date)) & "%'"
Adodc1.Refresh
ashkan1234
یک شنبه 12 شهریور 1391, 15:35 عصر
Adodc1.RecordSource = "SELECT * FROM Table1 where year(TarikhEngheza) <= " & "%'" & Year(To_Hejri(Date)) & " and month(TarikhEngheza) <= " & Month(To_Hejri(Date)) & " and day(TarikhEngheza) < " & Day(To_Hejri(Date)) & "%'"
Adodc1.Refresh
همه رو فیلتر میکنه!(کلا خالی میشه)
SlowCode
یک شنبه 12 شهریور 1391, 17:45 عصر
علامت هاي "%" لازم نيست، چون سال 4 رقمه و ثابته، واسه ماه و روز هم ممكنه مشكل ساز بشه، مثلا اگه ماه جاري فروردين باشه برنامه ماه هاي 1و11و12 رو هم مياره كه اشتباهه.
اول میره اونی که تاریخ انقضاش گذشته رو نشون میده!
فقط هم رو یک شخص فیلتر میشه!یعنی اگه ده نفر هم تاریخ انقضاشون گذشته باشه،فقط یک شخص در لیست باکس میاد!
بله شما درست ميگي. من برعكس نوشتم، بايد از =< استفاده ميكردم. يعني به اينصورت:
Adodc1.RecordSource = "SELECT * FROM Table1 where year(TarikhEngheza) >= " & Year(To_Hejri(Date))
ولي يه مشكلي هست، مثلا اگه تاريخ انقضا 1392/2/30 باشه با كد ما جور در نمياد، چون سالش بزرگتره ولي ماهش كوچكتره و روزش هم بيشتره. پس ما كلا به كد ديگه اي نياز داريم.
به نظرم بهتره از آقاي واژدي و يا M.T.P كمك بگيريم.
ashkan1234
یک شنبه 12 شهریور 1391, 19:18 عصر
علامت هاي "%" لازم نيست، چون سال 4 رقمه و ثابته، واسه ماه و روز هم ممكنه مشكل ساز بشه، مثلا اگه ماه جاري فروردين باشه برنامه ماه هاي 1و11و12 رو هم مياره كه اشتباهه.
بله شما درست ميگي. من برعكس نوشتم، بايد از =< استفاده ميكردم. يعني به اينصورت:
Adodc1.RecordSource = "SELECT * FROM Table1 where year(TarikhEngheza) >= " & Year(To_Hejri(Date))
ولي يه مشكلي هست، مثلا اگه تاريخ انقضا 1392/2/30 باشه با كد ما جور در نمياد، چون سالش بزرگتره ولي ماهش كوچكتره و روزش هم بيشتره. پس ما كلا به كد ديگه اي نياز داريم.
به نظرم بهتره از آقاي واژدي و يا M.T.P كمك بگيريم.
بله،دقیقا این مشکلات هستش!
اینقدر جناب واژدی تا همین حالا هم به من کمک کردن که من دیگه روم نمیشه،از ایشون کمک بخوام!(واقعا شرمنده شونم)
ولی خوب از جناب M.T.P کمک میخواهیم!(امیدوارم به این تاپیک یک سری بزنند)
m.4.r.m
یک شنبه 12 شهریور 1391, 21:17 عصر
برنامه رو بزار اینجا دانلود کنم برات درستش می کنم . تئوری 100 تا نظر میشه خود نظر دهنده هم گیج میشه برنامه جدید رو آپ کن برات درستش می کنیم
ashkan1234
یک شنبه 12 شهریور 1391, 21:24 عصر
برنامه رو بزار اینجا دانلود کنم برات درستش می کنم . تئوری 100 تا نظر میشه خود نظر دهنده هم گیج میشه برنامه جدید رو آپ کن برات درستش می کنیم
خدمت شما داداش گلم.
http://www.mediafire.com/?zc7fdegdoobfbo7
m.4.r.m
یک شنبه 12 شهریور 1391, 22:21 عصر
شما نباید هم جواب بگیری این دستور تو برنامه شما اصلا صدق نمی کنه
"SELECT * FROM Table1 where year(TarikhEngheza)
شما تو جدول تاریخ ها رو باهم یک فیلد گرفتی چطور تو دستور SQL از Year استفاده کردی SQL همچین دستوری نداره پس شما باید کل تاریخ رو با کل تاریخ مقایسه کنی نه سال با سال ماه با ماه و روز به روز یه مقایسه سادس با تاریه فعلی و تاریخ انقضا برنامه شما اگر برابر بود نشون میده اگر نه خالی نشون میده
m.4.r.m
یک شنبه 12 شهریور 1391, 22:24 عصر
Dim dTMP As String
dTMP = shamsi.Sh_Date(Date, shNumeral)
Adodc1.RecordSource = "SELECT * FROM Table1 where TarikhEngheza <='" & dTMP & "%'"
Adodc1.Refresh
این ocx رو هم به برنامه اضافه کن ببین جواب میگیری یا نه
ashkan1234
یک شنبه 12 شهریور 1391, 22:43 عصر
Dim dTMP As String
dTMP = shamsi.Sh_Date(Date, shNumeral)
Adodc1.RecordSource = "SELECT * FROM Table1 where TarikhEngheza <='" & dTMP & "%'"
Adodc1.Refresh
این ocx رو هم به برنامه اضافه کن ببین جواب میگیری یا نه
متاسفانه جواب نمیده! درست فیلتر نمیکنه!بعضی از اونایی که تاریخشون گذشته رو فیلتر میکنه!!!(کلا در هم فیلتر میکنه)
از ocx که گذاشتی استفاده کردم!ولی...
فکر کنم بزرگتر کوچکتر رو اشتباه گذاشتی بزار چک کنم الان خبر میدم
m.4.r.m
یک شنبه 12 شهریور 1391, 22:48 عصر
ببین معنی انقضاء یعنی چی ؟
تاریخ انقضاء = تاریخ فعلی درسته ؟ بعضی وقتا هم میشه تاریخ فعلی شما از تاریخ انقضای ثبت شده بزرگ باشه یعنی تاریخ انقضا 4 ماه پیش 91/02/13 پس از 91/06/13 که فعلی بشه کوچیکه دیگه درسته پس شرط => باید روش اعمال بشه همه تاریخ انقضاهای شما بزرگتر از تاریخ فعلی هستن یعنی هنوز نرسیدن 91/12/06 شده الان ؟
یا مثلا تاریخ انقضای شما 1392/06/12 هستش آیا میشه الان انقضا رو نشون بده ؟
ashkan1234
یک شنبه 12 شهریور 1391, 22:58 عصر
ببین معنی انقضاء یعنی چی ؟
تاریخ انقضاء = تاریخ فعلی درسته ؟ بعضی وقتا هم میشه تاریخ فعلی شما از تاریخ انقضای ثبت شده بزرگ باشه یعنی تاریخ انقضا 4 ماه پیش 91/02/13 پس از 91/06/13 که فعلی بشه کوچیکه دیگه درسته پس شرط => باید روش اعمال بشه همه تاریخ انقضاهای شما بزرگتر از تاریخ فعلی هستن یعنی هنوز نرسیدن 91/12/06 شده الان ؟
یا مثلا تاریخ انقضای شما 1392/06/12 هستش آیا میشه الان انقضا رو نشون بده ؟
داداش یک اشتباه کوچولو داری!(اونایی که منقضی نشدن باید نمایش داده بشن)
شرط اینجوری درسته <=
امتحان کن!
من امتحان کردم،با ماژول خودمم تست کردم!100% اوکی بود!با ocx شما هم تست کردم 100% اوکی بود!
حتی اینجوری هم زدم:تاریخ ثبت 1391،تاریخ انقضا 1390 هیچ مشکلی نداشت(واسه اینکه بعدا واسه کاربر باگ نده تست کردم)
مشکل حله!
خیلی زحمت کشیدی!دستت درد نکنه!
یک دنیا ممنون!
دوستت دارم داداش!
m.4.r.m
یک شنبه 12 شهریور 1391, 23:04 عصر
اوکی اشتباه بنده از درست تحلیل نکردن سوال شما بوده موفق باشی دوست عزیز ممنون لطف داری
ashkan1234
دوشنبه 13 شهریور 1391, 14:56 عصر
فقط یه چیزی الان به ذهنم رسید!
اون حالت که اتوماتیک تاریخ سیستم رو میریخت تو تکست باکس "تاریخ ثبت" رو برداشتم و گذاشتم خود کاربر تاریخ وارد کنه(واسه تاریخ انقضا هم برداشتم)
یعنی تکست باکس ها شدن اینجوری"0000/00/00"
حالا هر وقت کابر بخواد تاریخ ثبت و انقضا رو خودش میزاره!
فقط یه مشکلی هستش الان!
باید یک شرط بزاریم که سرچ کنه و اگه فیلد تاریخ انقضا="0000/00/00"شد اون شخص رو فیلتر نکنه!
ولی نمیدونم چطوری باید اینکارو بکنم!
m.4.r.m
دوشنبه 13 شهریور 1391, 16:10 عصر
دوست عزیز هر طوری که وارد بشه شما فقط نوع ورودی رو عوض کردین شرط ها همونا هستن بازم تاریخ انقضا باید با تاریخ فعلی مقایسه بشه . که شرطش رو براتون نوشتم جواب من از نتایج تحلیل شوال شما بود اگر طوری دیگه است واضح بیان کنید
ashkan1234
دوشنبه 13 شهریور 1391, 16:40 عصر
دوست عزیز هر طوری که وارد بشه شما فقط نوع ورودی رو عوض کردین شرط ها همونا هستن بازم تاریخ انقضا باید با تاریخ فعلی مقایسه بشه . که شرطش رو براتون نوشتم جواب من از نتایج تحلیل شوال شما بود اگر طوری دیگه است واضح بیان کنید
خوب تاریخ انقضا و ثبت هر دو صفر اگه وارد شد،شرط میاد بازهم مقایسه رو انجام میده!بعد میبینه که تاریخ انقضا"0" از تاریخ روز کوچیکتره و اونو هم فیلتر میکنه!
در صورتی که اگه کاربر تاریخ انقضا یک شخص رو "0" قرار داد،اون شخص نباید فیلتر بشه(یعنی باید در دیتا کمبو نمایش داده بشه)!
m.4.r.m
دوشنبه 13 شهریور 1391, 20:56 عصر
شما اینو در تکست باکس تاریخ وارد کن در Event مربوطش یعنی LostFocus اون موقع ببین کاربر می تونه همچین کاری بکنه
Dim sYEAR As String
Dim sMonth As String
Dim sDay As String
Private Sub txtdate_LostFocus()
sYEAR = Left(txtdate.Text, 4)
sMonth = Mid(txtdate.Text, 6, 2)
sDay = Right(txtdate.Text, 2)
If (sYEAR = "0000") Or (sYEAR < "1330") Then
MsgBox "Year : Shoud >1330 ", vbCritical, ""
txtdate.SelStart = 0
txtdate.SelLength = Len(txtdate.Text)
txtdate.SetFocus
ElseIf (sMonth = "00") Or (sMonth > "12") Then
MsgBox "Month : Shoud > 0 and <=12", vbCritical
txtdate.SelStart = 0
txtdate.SelLength = Len(txtdate.Text)
txtdate.SetFocus
ElseIf (sDay = "00") Or (sDay > 31) Then
MsgBox "Day : Shoud >00 and <=31)", vbCritical
txtdate.SelStart = 0
txtdate.SelLength = Len(txtdate.Text)
txtdate.SetFocus
End If
End Sub
ashkan1234
دوشنبه 13 شهریور 1391, 21:13 عصر
شما اینو در تکست باکس تاریخ وارد کن در Event مربوطش یعنی LostFocus اون موقع ببین کاربر می تونه همچین کاری بکنه
Dim sYEAR As String
Dim sMonth As String
Dim sDay As String
Private Sub txtdate_LostFocus()
sYEAR = Left(txtdate.Text, 4)
sMonth = Mid(txtdate.Text, 6, 2)
sDay = Right(txtdate.Text, 2)
If (sYEAR = "0000") Or (sYEAR < "1330") Then
MsgBox "Year : Shoud >1330 ", vbCritical, ""
txtdate.SelStart = 0
txtdate.SelLength = Len(txtdate.Text)
txtdate.SetFocus
ElseIf (sMonth = "00") Or (sMonth > "12") Then
MsgBox "Month : Shoud > 0 and <=12", vbCritical
txtdate.SelStart = 0
txtdate.SelLength = Len(txtdate.Text)
txtdate.SetFocus
ElseIf (sDay = "00") Or (sDay > 31) Then
MsgBox "Day : Shoud >00 and <=31)", vbCritical
txtdate.SelStart = 0
txtdate.SelLength = Len(txtdate.Text)
txtdate.SetFocus
End If
End Sub
عینا اینی که گفتی رو زدم و تغییرات رو هم اعمال کردم،ولی هیچ تغییری به وجود نیومد!
m.4.r.m
سه شنبه 14 شهریور 1391, 08:36 صبح
تاریخ اگر از نوع رشته تعریف شده باشد در دیتابیس پس مشکلی نخواهی داشت اینکه هیچ تغییری نکرد یعنی چی ؟
ashkan1234
سه شنبه 14 شهریور 1391, 09:36 صبح
تاریخ اگر از نوع رشته تعریف شده باشد در دیتابیس پس مشکلی نخواهی داشت اینکه هیچ تغییری نکرد یعنی چی ؟
تاریخ ازنوع رشته است!
یعنی اینکه بازهم اونایی که تاریخ ثبت و انقضاشون=صفر است در دیتا کمبو نمایش داده نمیشوند!
m.4.r.m
سه شنبه 14 شهریور 1391, 09:41 صبح
عزیز من اون کد رو دادم به شما که کاربر نتونه تاریخ 0 وارد کنه باید جلوگیری کنید تا تاریخ Invalid وارد برنامه نشه به این میگن کنترل ورودی
ashkan1234
سه شنبه 14 شهریور 1391, 10:23 صبح
عزیز من اون کد رو دادم به شما که کاربر نتونه تاریخ 0 وارد کنه باید جلوگیری کنید تا تاریخ Invalid وارد برنامه نشه به این میگن کنترل ورودی
خوب راهی نیست کاربر اگر صفر وارد کرد،عمل فیلتر روی صفرها انجام نشه!
چون همچین نرم افزارهایی زیاد دیدم!که تاریخ ثبت و انقضا رو مساوی صفر میزارن،بعد اگه کاربر خواست خودش به هرکی تاریخ میده!
m.4.r.m
سه شنبه 14 شهریور 1391, 15:27 عصر
پس منظور شما این هستش که حالت Default باشه که کاربر صفر وارد کرده . اوکی گرفتم شما چی میگی برنامه رو آپ کن درست کنم یادم رفته چی به چی بود
ashkan1234
سه شنبه 14 شهریور 1391, 15:54 عصر
پس منظور شما این هستش که حالت Default باشه که کاربر صفر وارد کرده . اوکی گرفتم شما چی میگی برنامه رو آپ کن درست کنم یادم رفته چی به چی بود
آره دقیقا دیفالت صفر هستش!
اگه کاربر تاربخ وارد کرد : فیلترینگ فقط رو اونا که تاریخ براشون ثبت شده انجام بشه!
بفرمایید.الان دقیقا اونجوری تنظیم کردم که میخوام!
http://www.mediafire.com/?lnjrdfehiu3n9aw
m.4.r.m
سه شنبه 14 شهریور 1391, 18:01 عصر
من تست کردم وقتی رو کمبو باکس کلیک می کنی اصلا تاریخ صفر ها رو نمیاره چه جوری میگی میاره 0000/00/00 از تاریخ فعلی 100% کوچیکه در صورتی که شرط شما بزرگتر از تاریخ فعلی پس منطقی باشیم نشون نمیده و اما موقعی که شما فیلترینگ می کنی بعد میری در همون لحظه کاربر جدید ثبت می کنه بر میگردی اون کاربرو نشون میده که می تونی موقع کلیک بر روی دکمه NEW این کد رو توش بنویسی که مطمئنا مشکلت حل خواهد شد . تست کن جواب میگیری
Private Sub Command2_Click()
Adodc1.RecordSource = "Select * from Table1"
Adodc1.Refresh
NewPers.Show 1
End Sub
ashkan1234
سه شنبه 14 شهریور 1391, 20:01 عصر
من تست کردم وقتی رو کمبو باکس کلیک می کنی اصلا تاریخ صفر ها رو نمیاره چه جوری میگی میاره 0000/00/00 از تاریخ فعلی 100% کوچیکه در صورتی که شرط شما بزرگتر از تاریخ فعلی پس منطقی باشیم نشون نمیده و اما موقعی که شما فیلترینگ می کنی بعد میری در همون لحظه کاربر جدید ثبت می کنه بر میگردی اون کاربرو نشون میده که می تونی موقع کلیک بر روی دکمه NEW این کد رو توش بنویسی که مطمئنا مشکلت حل خواهد شد . تست کن جواب میگیری
Private Sub Command2_Click()
Adodc1.RecordSource = "Select * from Table1"
Adodc1.Refresh
NewPers.Show 1
End Sub
داداش،احتمالا بنده خیلی منظورم رو بد میرسونم!
همونطور که قبلا هم عرض کردم باید در DataCombo اونایی که تاریخ انقضاشون صفر هست+اونایی که تاریخ انقضاشون هنوز نرسیده رو نشون بده!
بله.درسته .شرطی که ما گذاشتیم،گفتیم بیا تاریخ روز رو با تاریخ انقضا مقایسه کن،خوب اونم میاد تاریخ انقضاهایی که صفر هستند رو هم مقایسه میکنه و بدون شک اونا رو هم تو دیتا کمبو نشون نمیده!
این کدی که شما دادی،میاد تیبل1 رو رفرش میکنه و همه اطلاعاتش رو برمیگردونه در گرید!(که اصلا ربطی به اون چیزی که میخواییم نداره)!میخوای یکبار دیگه سورس رو چک کنی!
باید در DataCombo اونایی که تاریخ انقضاشون صفر هست+اونایی که تاریخ انقضاشون هنوز نرسیده رو نشون بده!
m.4.r.m
سه شنبه 14 شهریور 1391, 21:22 عصر
باید در DataCombo اونایی که تاریخ انقضاشون صفر هست+اونایی که تاریخ انقضاشون هنوز نرسیده رو نشون بده!
چه جوری این بدبخت می تونه هم بزرگتر و هم کوچکتر رو یک لحظه نشون بده تاریخ انقضا هنوز نرسیده پس بزرگتر از تاریخ فعلی ، و تاریخ 0 که کوچکتر از تاریخ فعلی و انقضاش گذشته چه معنی میده من نمیدونم همچین جست و جویی امکان نداره زیادی داری بزرگش میکنی این برنامه رو آخه یعنی چی واقعا این جست و جو اگه قرار اونایی که هنوز نرسیدن رو نشون بده پس صفر چیه ؟
ashkan1234
چهارشنبه 15 شهریور 1391, 08:16 صبح
چه جوری این بدبخت می تونه هم بزرگتر و هم کوچکتر رو یک لحظه نشون بده تاریخ انقضا هنوز نرسیده پس بزرگتر از تاریخ فعلی ، و تاریخ 0 که کوچکتر از تاریخ فعلی و انقضاش گذشته چه معنی میده من نمیدونم همچین جست و جویی امکان نداره زیادی داری بزرگش میکنی این برنامه رو آخه یعنی چی واقعا این جست و جو اگه قرار اونایی که هنوز نرسیدن رو نشون بده پس صفر چیه ؟
هوررا...
بلاخره تونستم دست وپا شکسته منظورم رو برسونم!
نرم افزار همه چیش تموم شدست!
دوتا گیر کوچیک داره که یکیش اینه!
شدنی که هست،چون نرم افزار اداره مالیات رو دیدم،اینکارو انجام میده!
فقط باید یجاش یه شرطی گذاشت که اگه به صفر بر خوردی،فیلترش نکن!
تو برنامه نویسی،هیچ چی نشد نداره!
از این راه نشد،از یه راه دیگه وارد میشم!
بلاخره شما هم کلی زحمت کشیدید،وقت گذاشتید!دستتون در نکنه.
m.4.r.m
چهارشنبه 15 شهریور 1391, 08:34 صبح
موفق باشب اما صفر نزار خالی بزار تا توی شرط بتونی بنویسی Where Tatikhengheza Is Null اینطوری خوبه
m.4.r.m
چهارشنبه 15 شهریور 1391, 08:47 صبح
با دوز و کلک و دور و زدن و ترفند های رشتی برات نوشتم اینایی رو که تو کد می بینی به فرم اضافه کن یه Adodc2 و Datacombo رو پاک کن یه Combo باکس ساده بزار و یک دکمه اضافه کن و این کد هارو تو اون دکمه ذخیره کن بعد می تونی هر جوری خواستی خودت اصلاح کنی .
Private Sub Command7_Click()
Adodc1.RecordSource = "SELECT * FROM Table1 where TarikhEngheza >='" & To_Hejri(Date) & "%'"
Adodc2.RecordSource = "Select * From Table1 where TarikhEngheza Is Null"
Adodc1.Refresh
Adodc2.Refresh
Dim i, j As Integer
For i = 1 To Adodc2.Recordset.RecordCount
Combo2.AddItem Adodc2.Recordset.Fields("Name")
Adodc2.Recordset.MoveNext
Next i
For j = 1 To Adodc1.Recordset.RecordCount
Combo2.AddItem Adodc1.Recordset.Fields("Name")
Adodc1.Recordset.MoveNext
Next j
End Sub
ashkan1234
چهارشنبه 15 شهریور 1391, 15:17 عصر
با دوز و کلک و دور و زدن و ترفند های رشتی برات نوشتم اینایی رو که تو کد می بینی به فرم اضافه کن یه Adodc2 و Datacombo رو پاک کن یه Combo باکس ساده بزار و یک دکمه اضافه کن و این کد هارو تو اون دکمه ذخیره کن بعد می تونی هر جوری خواستی خودت اصلاح کنی .
Private Sub Command7_Click()
Adodc1.RecordSource = "SELECT * FROM Table1 where TarikhEngheza >='" & To_Hejri(Date) & "%'"
Adodc2.RecordSource = "Select * From Table1 where TarikhEngheza Is Null"
Adodc1.Refresh
Adodc2.Refresh
Dim i, j As Integer
For i = 1 To Adodc2.Recordset.RecordCount
Combo2.AddItem Adodc2.Recordset.Fields("Name")
Adodc2.Recordset.MoveNext
Next i
For j = 1 To Adodc1.Recordset.RecordCount
Combo2.AddItem Adodc1.Recordset.Fields("Name")
Adodc1.Recordset.MoveNext
Next j
End Sub
دستت درد نکنه،ولی بازهم پاسخگو نبود!
تاریخ انقضا رو هم خالی کردم و این کدها رو اجرا کردم ولی جواب نمیده!
m.4.r.m
چهارشنبه 15 شهریور 1391, 19:56 عصر
چرا جواب گرفتم من خودم برو داخل دیتابیس کلا تاریخ انقضاء رو خالی کن یعنی صفرم نباشه موقع ذخیره سازی هم هیچی ذخیره نکن خالی و Empty بعد این دستور جواب میده من جواب گرفتم که برات گذاشتم یه جایی داری باز اشتباه می کنی حتما
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.