למרות ש...

  • פותח הנושא viby
  • פורסם בתאריך

viby

New member
למרות ש...

זה לא הכי קשור לכאן...יש לי בטבלת אקסס מספר רשומות זהות ואני צריך לשנות חלק מהן (ע"י sql,recordset או כל דרך אחרת). יש למישהו פתרון לעניין.?? חן חן
 

ברנדל

New member
לא הבנתי

אתה רוצה שמשפט ה sql יתפוס רק לגבי חלק מהרשומות הזהות ולא לגבי כל הזהות? תסביר יותר טוב. בעיקרון עם עשית טבלה שאתה נותן ורוצה שיהיו בה רשומות זהות לחלוטין אז אתה לא תופס מבחינה לוגית כיצד אמורים לנהל בסיסי נתונים. איזה טבלא זו , למה אתה משתמש בה. אם יש לך רשומות זהות לחלוטין (שאסור שיהיו) תוסיף עוד שדה של אינדקס על מנת ליצור שדה מתפח, ותעשה select לפיו.
 

viby

New member
>>>

יש שדה מפתח (מספר רץ) אבל הוא לא רלוונטי כאן. למשל, נניח שכל קניה של מוצר נרשמת ואם לקוח מחזיר מוצר אני רוצה לציין את זה בשדה נוסף באותה טבלה. לכן אני צריך לקחת רשומה מסויימת של קניית המוצר באותו יום (אם נקנו כמה זה לא משנה לי את איזה אני אבחר כי מבחינתי הן זהות במקרה הזה למרות שיש ביניהן הבדל של שדה המפתח) וברשומה זו לעדכן את השדה הרלוונטי. כלומר , צריך לשנות רק רשומה אחת שמקיימת תנאי שאולי עוד רשומות מקיימות.
 

ברנדל

New member
עושים זאת כך:

נניח אתה משתמש ב ado. בהתחלה אתה לוקח את כל הרשומות לתוך recordset
dim str as string str = "SELECT * FROM PRODUCTS WHERE PRODUCTNAME = '" & milk & "' AND _ ISBUY = '" false "'" dim rs as new adodb.recordset rs.open(str , consystem ,adopendynamic , adlockoptimistick) if rs.eof <> false then ' you are in the first record rs.field("ISBUY ") = true rs.update end if rs.close הנחתי שהגדרת consystem כ connection שים לב שבגלל שאני לא עושה movenext אז אני משנה רק את הרשומה הראשונה​
 

viby

New member
>>>

אתה יכול להסביר את ה consystem כי עשיתי משהו כמעט זהה למה שכתבת וגם העתקתי את מה שכתבת אבל עם CurrentProject.Connection וזה לא עבד... זה לא שינה אף רשומה...
 

ברנדל

New member
טוב

דבר ראשון, אתה חייב לפתוח connection.
Public Sub initConnection() Dim dbPath As String Set ConSystem = New ADODB.Connection ConSystem.ConnectionTimeout = 120 ConSystem.Provider = "Microsoft.Jet.OLEDB.4.0" ' 3.51 dbPath = App.Path If right(dbPath, 1) <> "\" Then dbPath = dbPath & "\" Else dbPath = dbPath End If dbPath = dbPath & CURRENT_DB ConSystem.Properties("Data Source").Value = dbPath 'On Error GoTo ERR_HANDLER ConSystem.Open Exit Sub ERR_HANDLER: MsgBox "Fatal Error: Can't Open DB Connection,please contact PowerLink ,now closing..." End End Sub​
למעשה בקוד הנ"ל פתחנו את ה connection (התקשורת עם בסיס הנתונים) אגב אל תשכח להגדיר משתנה גלובלי Public ConSystem As ADODB.Connection שים לב שאתה חייב להגדיר את CURRENT_DB ולתת לו ערך שהוא השם של בסיס הנתונים שלך (שים אותו בתוך הספרייה שבה נמצא קובץ ה vbp). עכשיו תחזור לקוד שרשמתי לך קודם ותשנה כמה דברים לפני שאתה עושה rs.field("milke") = ... תעשה שורה לפני rs.edit אחרת זה לא יעבוד בשורה של open, הפרמטר השני צריך להיות consystem שזה שם ה connection שפתחת. בהצלחה!
 

viby

New member
>>>

קודם כל תודה על המאמץ. יש לי כמה בעיות עם זה: א.אין edit ל recordset. ב. אני עובד על אקסס עם vba, אני צריך לפתוח connection?זה לא מקושר ע"י המערכת? ג. בשורה App.path יש הודעת שגיאה object required...
 

ברנדל

New member
תשובה

א. צודק, ביטלו את זה ב vb6 ויש צורך רק ב update ב. אין לי מושג, אני מכיר vb (למה לעבוד עם vba)? ג. יכול להיות שלא הגדרת בקבוע את שם בסיס בהתונים שלך? או שב vba אין אוביקט שנקרא App אלא רק ב vb?
 

viby

New member
>>>

למיטב ידיעתי והבנתי לא מחברים connection כי גם כשאתה מחבר הוא לא נותן לפתוח כי מישהו (האפליקציה שלך) כבר משתמש ב db הזה (זו מין רקורסיה שכזו). לכן לא צריך את החיבור אבל את מה שכתבת לפני כן לגבי ה recordset עשיתי והוא לא מעדכן...
 

ברנדל

New member
דווקא כן מחברים

אם אין לך אוביקט מסוג connection אז אין לך מה לשלוח בתור הפרמטר השני של open של האוביקט recordset. אם זו ההודעה שקיבלת סביר להניח שקובץ ה mdb שלך פתוח והטבלא המבוקשת פתוחה בו. תסגור ותפעיל את האפליקציה. תראה התעסקתי עם הסיפור הזה המון ואצלי אין שום בעיות.
 
למעלה