View Full Version : سوال: جایگزین کردن یک کلمه به جای کلمه دیگر یک متن طولانی
behzad5952
یک شنبه 09 شهریور 1393, 13:12 عصر
با سلام و خسته نباشید خدمت دوستان و اساتید محترم . مشکل من اینه که در یک بانک اطلاعاتی که شامل تعداد بسار زیادی آدرس است , نیازمند تغییر نام یک خیابان که در آدرس مشترک نوشته شده به یک به نام جدید که توسط کاربر مشخص می شود هستم , بدلیل حجم زیاد اطلاعات اصلاح تک به تک آدرس ها بسیار زمان بر و با درصد خطای زیاد میباشد. فکر می کنم باید از تابع Replace استفاده بشه ولی روش صحیح رو نمی دونم. دوستان و اساتید محترم لطفا کمک بفرمایید.
Rasool-GH
یک شنبه 09 شهریور 1393, 14:41 عصر
سلام
اگر واسه یکبار میخوای این کار رو بکنی میتونی دستی داخل جدول تغییر رو اعمال کنی ولی اگه موادم این کار باید انجام بشه از ترکیب فرم و کوئری استفاده کم
behzad5952
یک شنبه 09 شهریور 1393, 17:12 عصر
سلام.
مدام نیاز به تغییر دارم.
لطفا برای درک بهتر یه نمونه بگذارید هر چند ساده.
ممنون.
behzad5952
دوشنبه 10 شهریور 1393, 11:23 صبح
دوستان عزیز لطفا بذل نظر و همکاری بفرمایید ...
behzad5952
دوشنبه 10 شهریور 1393, 11:27 صبح
......................................
ariayekta
دوشنبه 10 شهریور 1393, 16:58 عصر
دوستان عزیز لطفا بذل نظر و راهنمایی بفرمایید ....
سلام
نمون خودتو بذار برات انجام بدم
behzad5952
سه شنبه 11 شهریور 1393, 11:16 صبح
نقل قول: جایگزین کردن یک کلمه به جای کلمه دیگر یک متن طولانی
با سلام و تشکر فراوان.
پیوست نمونه خدمت شما.
behzad5952
چهارشنبه 12 شهریور 1393, 14:27 عصر
دوستان عزیز نمونه هم که گذاشتم لطفا همکاری کنید ...
ممنون
amirzazadeh
چهارشنبه 12 شهریور 1393, 18:22 عصر
سلام
روي دكمه فرمتون اين كد رو قرار بديد:
Private Sub Command5_Click()
Dim result As String
result = Replace(Me.Field2, Me!as, Me!to)
Me.Field2 = result
Me.Requery
End Sub
behzad5952
چهارشنبه 12 شهریور 1393, 19:01 عصر
با تشکر از جناب آقای amirzazadeh (http://barnamenevis.org/member.php?47888-amirzazadeh) عزیز .
لطفا این کد را توی یک حلقه قرار دهید که بعد از تغییر هر رکورد به رکورد بعدی بره و به این شکل تمام رکوردها با یک کلیک اصلاح بشه.
با درود فراوان .
amirzazadeh
پنج شنبه 13 شهریور 1393, 08:37 صبح
با تشکر از جناب آقای amirzazadeh (http://barnamenevis.org/member.php?47888-amirzazadeh) عزیز .
لطفا این کد را توی یک حلقه قرار دهید که بعد از تغییر هر رکورد به رکورد بعدی بره و به این شکل تمام رکوردها با یک کلیک اصلاح بشه.
با درود فراوان .
كد رو به اين شكل اصلاح كنيد:
Private Sub Command5_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Dim result As String
With db
Set rs = .OpenRecordset("table1", dbOpenDynaset)
rs.MoveFirst
Do Until rs.EOF
result = Replace(rs!Field2, Me!as, Me!to)
rs.Edit
rs!Field2 = result
rs.Update
rs.MoveNext
Loop
End With
rs.Close
Me.Requery
End Sub
behzad5952
پنج شنبه 13 شهریور 1393, 20:23 عصر
با تشکر فراوان از پیگیری و بذل نظر شما .من نمومه شما رو توی برنامه خودم کارسازی کردم و چند تا مشکل کوچیک پبش
اومد که نتونستم حلش کنم لطفا برام چکش کنید
با درود و تشکر فراوان
amirzazadeh
شنبه 15 شهریور 1393, 15:58 عصر
سلام
نامگذاري جدولها و نام فيلدها درست نيست علامت "-" و فاصله بين حروف بايد حذف بشه.به جاي منها از "_" يا همون خط زير ميتونيد استفاده كنيد.
Rasool-GH
چهارشنبه 02 مهر 1393, 13:06 عصر
اگر بخوایم که این تغییر در کلیه فیلدهای یک جدول باشه باید تابع رو برای تک تک فیلدها بنویسیم یا کار دیگه ای میشه کرد ؟
amirzazadeh
چهارشنبه 02 مهر 1393, 15:44 عصر
سلام
ميشه با استفاده از يه لوپ داخل كامند ارائه شده در پست 11 كليه فليدها رو چك كرد.
Private Sub Command5_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Dim i As Integer
Dim result As String
With db
Set rs = .OpenRecordset("table1", dbOpenDynaset)
rs.MoveFirst
Do Until rs.EOF
For i = 1 To rs.Fields.Count - 1
result = Replace(rs.Fields(i), Me!as, Me!to)
rs.Edit
rs.Fields(i) = result
rs.Update
Next i
rs.MoveNext
Loop
End With
rs.Close
Set rs = Nothing
Me.Requery
End Sub
Rasool-GH
پنج شنبه 03 مهر 1393, 07:10 صبح
سلام . ممنون که رسیدگی کردین
یک سوال این که اگر بخوام اسامی جداول رو به دست بیارم که همین حلقه رو برای کلیه جداول دیتابیس بنویسم از چه دستوری استفاده کنم و اینکه جداول پیشفرض اکسس رو باید از این قاعده خارج کنم یا نه .
دوم این که از دو دستور rs.Close و Set rs = Nothing در پایان برنامه استفاده کردین . ایا هر دوی این دستورات رکوردست رو میبنده ؟
m.elmi
پنج شنبه 03 مهر 1393, 15:24 عصر
سلام . ممنون که رسیدگی کردین
یک سوال این که اگر بخوام اسامی جداول رو به دست بیارم که همین حلقه رو برای کلیه جداول دیتابیس بنویسم از چه دستوری استفاده کنم و اینکه جداول پیشفرض اکسس رو باید از این قاعده خارج کنم یا نه .
دوم این که از دو دستور rs.Close و Set rs = Nothing در پایان برنامه استفاده کردین . ایا هر دوی این دستورات رکوردست رو میبنده ؟
سلام - روش ساده براي بدست آوردن اسامي جداول:
Dim tb As TableDef
For Each tb In CurrentDb.TableDefs
If Left(tb.Name, 4) <> "MSys" Then
Debug.Print tb.Name
End If
Next
salambeshoma
چهارشنبه 09 مهر 1393, 18:08 عصر
سلام دوستان عزیز چطور میشه فقط در جایگزینی کلمه یا حروف جدید فقط سه کارکتر اول Replace بشود ؟ مثال 9851123 به 051123 تغیر یابد . یعنی تمام شماره هایی اوشان با 98 هست به 0 صفر تبدیل شوند.متشکر
amirzazadeh
چهارشنبه 09 مهر 1393, 18:45 عصر
سلام
شما ميتونيد با استفاده از تابع left دو رقم سمت چپ رو بگيريد اگر با شرط شما مطابقت داشت ادامه و در غير اينصورت رد ميشه.
اگر فيلد شما عددي باشه :
if left(FieldName,2)=98 then
.
.
.
EndIf
salambeshoma
پنج شنبه 10 مهر 1393, 11:24 صبح
سلام میشه این تابع رو تو ادامه دستور کامل Replace بیارین
amirzazadeh
پنج شنبه 10 مهر 1393, 18:31 عصر
لطفا نمونه خودتون رو اپلود كنيد.
ehemitsme
دوشنبه 22 تیر 1394, 13:26 عصر
select REPLACE(' اداري ساختماني ',N'ي',N'ی')
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.