قضية التلاعب بتخلص سلسلة DAO
سؤال
أنا أعمل مع منتج VB6 Legacy واجهت مشكلة حيث أحتاج إلى الحصول على جزء اسم الملف من المسار الكامل من جدول قاعدة البيانات عبر DAO. ليس لدي أي حق الوصول إلى وظائف VBA هنا لذلك أنا أبحث خصيصا ل MS Access SQL. ليس لدي طريقة لاسقادر بعض رمز إضافي بعد الاستعلام. أنا لا تغيير / إعادة المرسل الحل القصير لتعديل SQL.
الآن، لا تملك داو أي instrrev
أو replace
وظيفة لذلك أنا محدودة جدا.
أي تخمينات هناك؟ شكرا مقدما.
المحلول
على افتراض أنك لا تستطيع تغيير قاعدة البيانات الفعلية. وبعد وبعد
الشيء الوحيد الذي يمكنني أن أفكر فيه (وأنا مثقرا بواسطة العقول على هذا واحد، زميله آسف) هو استخدام المكالمات المتكررة إلى Instrument، متداخلة في تصريحات IIF، على سبيل المثال لاستبدال هذه الدعوة إلى InstructREV
SELECT IIf(InStr([FileName],""\"")>0,Mid$([Filename],InStrRev([Filename],""\"")+1),[Filename]) FROM Table1
سيكون لديك مجنون الكبرى
SELECT IIf(InStr([FileName],""\"")>0,Mid$([Filename],iif(InStr(1, [FileName], ""\"") > 0, iif(InStr(2, [FileName], ""\"") > 0, iif(InStr(3, [FileName], ""\"") > 0, iif(InStr(4, [FileName], ""\"") > 0, iif(InStr(5, [FileName], ""\"") > 0, iif(InStr(6, [FileName], ""\"") > 0, iif(InStr(7, [FileName], ""\"") > 0, iif(InStr(8, [FileName], ""\"") > 0, iif(InStr(9, [FileName], ""\"") > 0, 1, InStr(9, [FileName], ""\"")), InStr(8, [FileName], ""\"")), InStr(7, [FileName], ""\"")), InStr(6, [FileName], ""\"")), InStr(5, [FileName], ""\"")), InStr(4, [FileName], ""\"")), InStr(3, [FileName], ""\"")), InStr(2, [FileName], ""\"")), InStr(1, [FileName], ""\""))),[Filename]) from table1
سيعمل ذلك من أجل المسار الذي 10 أو نحو ذلك مجلدات فرعية عميقة. إذا كنت تعتقد أن 10 مجلدات فرعية قليلة جدا، فقد أنشأت VBA قليلا لتوليد العبارة إلى أي عمق تحتاجه.
Function BuildNestedIIfs(ByVal depth As Integer, byval maxDepth as integer) As String
Dim locator As String
If depth < maxDepth Then
locator = "InStr(" & depth & ", [FileName], """"\"""")"
Build = "iif(" & locator & " > 0, " & Build(depth + 1, maxDepth) & ", " & locator & ")"
Else
Build = "0"
End If
End Function
انها فاحشة، ولكن يجب أن تعمل
نصائح أخرى
يجب أن تكون قادرا على استخدام وظائف VBA المدمجة مثل instr
, replace
, mid
, ، إلخ.
يوجد وضع "مربع الرمل" الذي قد يحظره - راجع هذا على كيفية إلغاء حظرها http://support.microsoft.com/kb/294698.
اعتدت أن أفعل الكثير من برمجة DAO، لكن ذلك كان منذ 10-15 عاما ...
هل يمكنك تغيير DAO للاتصال بالوصول QueryDef ثم قم بإصلاحه هناك؟