Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];

Вниз

как в Delphi использовать VBA-функцию Access?   Найти похожие ветки 

 
DSKalugin ©   (2007-03-14 11:51) [0]

В Access-е 2003 написал VBA-функцию clear_num(х), для использования ее в запросах. В самой среде Access-а эти запросы работают, а при вызове этих запросов из Делфи через АДО - нет.
Сделал запрос "ClearNumbers", который содержит код:

UPDATE europeans SET cat_number = clear_num(cat_number)
WHERE id_marka=6;

Вызываю 2мя способами
ADOCommand.CommandText:="ClearNumbers";
ADOCommand.CommandType:=cmdStoredProc;
ADOCommand.Execute;

Сообщение: "Неопределенная функция clear_num в выражении"

Если текст запроса передавать из Делфи -аналогично

     ADOCommand.CommandText:="UPDATE europeans SET cat_number = clear_num(cat_number) WHERE id_marka=6";
     ADOCommand.CommandType:=cmdText;
     ADOCommand.Execute;

Сообщение: "Неопределенная функция clear_num в выражении"


 
Jan   (2007-03-14 11:56) [1]

никак


 
DSKalugin ©   (2007-03-14 12:27) [2]

нашёл кое что


http://citforum.ru/programming/windows/excel_faq/part2.shtml#2.24
Как создать макрос из Delphi? Как выполнить макрос, имеющийся в книге?


Вам не удастся создать макрос программно, т.к. по умолчанию в Excel VBA Project отключен доступ к VBA из программ. Как включить эту возможность, читайте "PRB: Programmatic Access to Office XP VBA Project Is Denied"



http://support.microsoft.com/kb/282830
For any Automation client to be able to access the VBA object model programmatically, the user running the code must explicitly grant access. To turn on access, the user must follow these steps.

Office 2003 and Office XP1.

Open the Office 2003 or Office XP application in question. On the Tools menu, click Macro, and then click Security to open the Macro Security dialog box.
2. On the Trusted Sources tab, click to select the Trust access to Visual Basic Project check box to turn on access.
3. Click OK to apply the setting. You may need to restart the application for the code to run properly if you automate from a Component Object Model (COM) add-in or template.


Но у меня этот чекбокс в Акцессе неактивен ...


 
Jan   (2007-03-14 12:34) [3]

только макрос и выполнение запросов через провайдера(в даном случае Jet) - разные весщи...


 
Сергей М. ©   (2007-03-14 12:51) [4]


> DSKalugin ©   (14.03.07 11:51)


VBAAccess-макросы может исполнять только сам MSAccess.
ADO-компоненты не имееют к ПО MSAccess прямого отношения - MSAccess может быть и не инсталлирован, и при этом ADO-компоненты вполне работоспособны, ибо MSAccess для их работы совршенно не нужен.


 
Mike Kouzmine ©   (2007-03-14 16:40) [5]

А если создать запрос, в нем вызвать эту фунцию. А запрос вызвать как хранимую процедуру.


 
DSKalugin ©   (2007-03-14 19:41) [6]

2 Mike Kouzmine ©

пробовал уже, см. первый вариант вызова

Спасибо, понятно. Буду вызывать руками в самом Акцессе или реализовывать эту функцию в клиентской программе. Только беда в том что
перебjh 3 млн. записей навигационным методом

Edit;
FieldByName("cat_number").AsString:= clear_num(FieldByName("cat_number").AsString);
Post;
Next;
займет сутки если не больше :-))

"Закат солнца вручную" (ручной вызов в Акцессе) занял 40минут на Пениуме 3 / 750Мгц

попробую еще проход с запросами на обновление


 
sniknik ©   (2007-03-14 19:50) [7]

> займет сутки если не больше :-))
если еще больше постараешься то можеш и до трех суток довести... (судя по приведенному куску в этом цель)

чудо функцию clear_num в запросе нельзя реализовать? в смысле написать прямо там все что она делает?


 
Jan   (2007-03-14 19:50) [8]


> clear_num

а чего она делает?


 
DSKalugin ©   (2007-03-15 13:33) [9]


> а чего она делает?

Вычищает ненужные символы в строке

Function clear_num(num)
 Dim num_char As String
 Dim i, j As Integer
 
 clear_num = ""
 j = Len(num)
 For i = 1 To j
   num_char = UCase(Mid(num, i, 1))
   If (num_char >= "0" And num_char <= "9") Or (num_char >= "A" And num_char <= "Z") Then clear_num = clear_num + num_char
 Next
End Function

на паскале
function CreateClearCod(vsCod: AnsiString):AnsiString;
const ClearChars:set of Char=["0".."9","A".."Z"];
var ns:AnsiString;
  i,j:Byte;
begin
Result:="";
ns:=AnsiUpperCase(vsCod);
j:=Length(ns);
for i:=1 to j do
  if (ns[i] in ClearChars)
    then Result:=Result+ns[i];
end


 
Jan   (2007-03-15 13:51) [10]

если это едино разово, а база большая можно перегнать в MS SQL там сделать все на T-SQL а потом вернуть в Access.


 
Val ©   (2007-03-15 14:25) [11]

функции replace нет в sql access"a?


 
Jan   (2007-03-15 14:31) [12]


> функции replace нет в sql access"a?

есть но что она даст?


 
Val ©   (2007-03-15 14:46) [13]

в оракле, она, при неуказанном заменяющем элементе
>Вычищает ненужные символы в строке



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.048 c
2-1177077166
s_t_d
2007-04-20 17:52
2007.06.03
QReport в Delphi 7. Как добавить элемент в палитру?


15-1178373658
Poed
2007-05-05 18:00
2007.06.03
В Турбо паскале не создается исполняемый файл!


1-1175846980
Bless
2007-04-06 12:09
2007.06.03
зачем нужно TInterfacedObject(Result).FRefCount := 1 ?


15-1178766213
Slider007
2007-05-10 07:03
2007.06.03
С днем рождения ! 10 мая


11-1160836684
AndreyRus
2006-10-14 18:38
2007.06.03
Free_And_Nil





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский