سؤال

أنا أعمل مع منتج 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 ثم قم بإصلاحه هناك؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top