![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не срабатывают события TADOQuery [D6, dBase, FoxPro]
АлеКс © (2003-09-03 04:13:00)
Добрый день господа!
У меня возник еще один вопрос по ODBC.
Получаю данные через ODBC использую компоненты
ADOCon: TADOConnection;
ADOQuery1: TADOQuery;
и строку ConnectionString:= Provider=MSDASQL.1;Persist Security Info=False;Connect Timeout=15;Extended Properties="DSN=Файлы FoxPro - Word;UID=;SourceDB=c:\Brd2003\DBF;SourceType=DBF;Exclusive=No;Backgrou ndFetch=No;Collate=Machine;Null=Yes;Deleted=Yes;";Locale Identifier=1049
Так вот у меня есть желание при добавлении данных в DataSet изменять значение одного поля.
Насколько я понял для этого служит событие
procedure TMainForm.ADOQuery1WillChangeField(DataSet: TCustomADODataSet;
const FieldCount: Integer; const Fields: OleVariant;
var EventStatus: TEventStatus);
Однако оно не срабатывает. Причем не срабатывают и некоторые другие события.
В чем может быть загвостка.
Спасибо.
АлеКс (2003-09-04 08:42:00) [1]
То что предложил sniknik © в принципе срабатывает однако "dBase IV" и все остальные пытаются открыть индекс и говорят что его нет. В реестре я посматрел и нашел расширения для индексных файлов а для FoxPro индексные файлы с расширением "*.cdx" что делать? может можно отключить.
АлеКс (2003-09-04 03:25:00) [2]
Вот текст маего запроса
SELECT t_oper_r.dtraspr, t_oper_r.summaraspr, s_korr.inn, m_budj.ubudj,
s_dohod.dohod, s_korr_1.sname
FROM ((((t_oper_r LEFT JOIN main3
ON t_oper_r.main3 = main3.link) LEFT JOIN s_korr
ON t_oper_r.korr = s_korr.link) LEFT JOIN m_budj
ON t_oper_r.budj = m_budj.link) LEFT JOIN s_dohod
ON t_oper_r.dohod = s_dohod.link) LEFT JOIN s_korr AS s_korr_1
ON main3.imns = s_korr_1.link;
АлеКс (2003-09-03 10:27:00) [3]
Вот пример плохого кода который у меня получился и все из-за того что у меня не сробытывает событие.
MainForm.ADOQuery1.Active:=true;
MainForm.ADOQuery1.First;
while not MainForm.ADOQuery1.Eof do begin
MainForm.ADOTable1.AppendRecord([
MainForm.ADOQuery1.FieldByName("dtraspr").value,
MainForm.ADOQuery1.FieldByName("summaraspr").value,
MainForm.ADOQuery1.FieldByName("inn").value,
MainForm.ADOQuery1.FieldByName("ubudj").value,
MainForm.ADOQuery1.FieldByName("dohod").value,
DosToWin(MainForm.ADOQuery1.FieldByName("sname").AsString)]);
MainForm.ADOQuery1.Next;
end;
функция DosToWin просто перекодирует строку.
Если работать через событие при добовлении записи в Qery то не пришлосьбы городить эту чуш.
sniknik (2003-09-03 10:27:00) [4]
попробуй так
SELECT * INTO TableAccess FROM TableDBF IN "D:\" "dBASE IV;"
если не пройдет (перекодировка), измени значение реестра
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase.DataCodePa ge = OEM или ANSI
АлеКс (2003-09-03 10:23:00) [5]
Интересно а можно в SELECT указать куда должны папасть данные.
АлеКс (2003-09-03 10:19:00) [6]
Я хотел бы например с помощью TADOQuery создать запрос и выполнить его а полученные данные поместить в таблицу Access.
KSergey (2003-09-03 10:15:00) [7]
Как именно помещаются данный в аксес?
Пример кода
АлеКс (2003-09-03 10:13:00) [8]
Я статейку нашел так вот там говорится что перечисленные мной выше события должны выполнятся при активизации TADOQuery.
http://www.interface.ru/fset.asp?Url=/borland/ado2.htm
АлеКс (2003-09-03 09:31:00) [9]
А вобще весь сырбор вот по какому поводу.
Мне необходимо выбрать из нескольких таблиц FoxPro некоторые данные и поместить их в таблицу Access.
Задача осложняется тем что почемуто русские буквы при получении данных искажаются (дело в кодировке) и теперь мне необходимо при получении данных отслеживать каждую запись для преобразования в новую кодировку.
АлеКс (2003-09-03 09:20:00) [10]
Скорей всего так и есть. Тогда подскажите в каком месте мне можно перехватьть добавление записи в DataSet так чтобы откорректировать поле последней добавленной записи.
sniknik (2003-09-03 08:25:00) [11]
> Однако оно не срабатывает. Причем не срабатывают и некоторые другие события.
> В чем может быть загвостка.
считаеш одно событие за другое и ждеш его не в том месте/случае.
KSergey (2003-09-03 08:07:00) [12]
ПРи добавлении записи происходят два события: BeforeInsert и AfterInsert. Возможно именно в адошных компонентах есть еще какие-то события, соответствующие этим. Смотреть лень.