Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.05;
Скачать: CL | DM;

Вниз

Пробежка по всей базе MS Access (mdb)   Найти похожие ветки 

 
naum   (2004-11-07 14:33) [0]

Господа, помогите! С базами до сих пор не сталкивался. Стоит задачка: открыть базу данных MS Access (mdb) и преобразовать все(!) записи. Имена таблиц и кол-во записей предварительно неизвестны. Т.е. мне по сути надо пробежаться по всем данным меняя определенным образом содержимое каждой записи. Помогите! Лучше если на примере фрагмента исходного кода.


 
YurikGL ©   (2004-11-07 15:04) [1]

Берешь адоконнекшн, подсоединяешь к базе, выясняешь, какие там есть таблицы, открываешь их по очереди и делаешь необходимые действия.

Если возникнут проблемы на одном из шагов - пиши, какая проблема и на каком шаге.


 
naum   (2004-11-07 23:18) [2]

Вообще я в базах не бум-бум. Имена таблиц как понимаю моно методом GetTablesName? Как мне пробежаться по полям в таблице (уже после открытия) и изменить их значение определенным образом? К тому же значения надо менять только в полях типа "строка" - как узнать тип поля?


 
Плохиш ©   (2004-11-07 23:33) [3]


> naum   (07.11.04 23:18) [2]

Может для начала всё-таки чего-нибуть почитаешь?


 
Hmm ©   (2004-11-07 23:40) [4]

насчет пробежаться по всем записям - эт просто:

adotable1.First;
repeat
..........
изменение данных, например
adotable1FIO.text:="Иванов";
{где adotable1FIO - "полное имя" поля FIO}
..........
adotable1.next;
until adotable1.eof;


 
Плохиш ©   (2004-11-07 23:42) [5]


> Hmm ©   (07.11.04 23:40) [4]

Ну да, особенно если набор данных пуст.


 
Hmm ©   (2004-11-07 23:47) [6]

приношу извенения, вот правильный код:


procedure TForm1.Button1Click(Sender: TObject);
begin
adotable1.First;
repeat
adotable1.Edit;
adotable1FIO.text:="Иванов";
{где adotable1FIO - "полное имя" поля FIO}
adotable1.Post;
adotable1.next;
until adotable1.eof
end;


 
Плохиш ©   (2004-11-07 23:53) [7]

[5]


 
Hmm ©   (2004-11-07 23:53) [8]

хм, ну можно немного поменять алгоритм... главное суть.

хотя, конечно, без "почитать"  врядли обойдется!


 
Nikolay M. ©   (2004-11-08 00:04) [9]


> Hmm ©

Почитай про цикл WHILE. И про Persistent-поля, чтобы не давать безграмотных названий

> adotable1FIO - "полное имя"

и не вводить человека в заблуждение.


 
naum   (2004-11-08 00:08) [10]

Я понимаю, что без почитать проблематично. Сижу читаю :) Просто очень внезапно встала задача... Только я не знаю имена полей... Ничего не знаю :( А надо бы пробежаться... Разобрался пока относительно:


TableList:=TStringList.Create;
ADOConnection1.ConnectionString:=       "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="  +FileName+";Persist Security Info=False";
 ADOConnection1.Connected:=True;
 ADOConnection1.GetTableNames(TableList);
 for i:=0 to TableList.Count-1 do
 begin
  ADOTable1.TableName:=TableList[i];
  ADOTable1.Open;
  {А вот как по неизвестным мне полям бежать?}
 end;
TableList.Free;
ADOConnection1.Connected:=False;


 
naum   (2004-11-08 00:10) [11]

[9] Не могли бы немного подробнее? Просто я действительно блужу :(


 
Плохиш ©   (2004-11-08 00:32) [12]


> naum   (08.11.04 00:10) [11]

Теперь читай про TTable.Fields

PS. Скушно-то как ...(зевает)


 
naum   (2004-11-08 00:48) [13]

Сенькс. Буду копать в этом направлении.

PS. Простите что не сплясал ...(уходит за кулисы)


 
sniknik ©   (2004-11-08 00:50) [14]

> ... ADOTable1 ...
?
не слушай их, после будеш жаловаться что аксес тормозной...
поля можно получить через GetFieldNames
или (если нужны сведения о типах) то через OpenSchema
дальше составляеш запрос на изменение (UPDATE) нужные тебе изменения вносиш прямо в запрос (... SET MyField=MyField*2, ... ), дальше выполняеш в ADOCommand.

это будет в сотни раз быстрее манипуляций с ADOTable


 
naum   (2004-11-08 01:24) [15]

Sniknik - вам спасибо огромное за моральную поддержку!
Все нижеследующие вопросы возникают лишь потому что надо очень быстро, а вникать очень долго. Заранее прошу прощение у всех Мастеров. Можно поподробнее относительно GetFieldNames - это метод какого компонента? Приведите пример использования OpenSchema, т.к. именно он мне и нужен - заглядывать надо в поля типа "строка". И еще - преобразования довольно таки сложные, т.е. сначало мне нужно получить значения - какой синтаксис будет SQL запроса? Еще раз прошу прощение за подобного рода вопросы :(


 
sniknik ©   (2004-11-08 10:46) [16]

ADOConnection1.GetFieldNames

пример OpenSchema можеш посмотреть в исходнике GetFieldNames (нажми Ctrl, подведи мышку на название метода и кликни, попадеш как раз куда нужно), там из всего только 1 поле используют, посмотри на все что возвращаются.

чтобы преобразования "зашить" в запрос, нужно более менее нормально sql знать,
JETSQL40.CHM справка по sql {есть или у тебя на машине если мсофис стоит или в его дистрибутиве иши}.
+ VBLR6.CHM справка по бейсику из того же офиса (многие из его функций можно использовать в запросе).

не извиняйся вопросы нормальные (лучше во всяком случае чем у некоторых любителей готового кода), а вот без подробного изучения, наскоком, ты вряд ли сделаеш нормально, это точно.


 
Nikolay M. ©   (2004-11-08 11:17) [17]


> naum

Ты бы хоть в общем написал, что нужно, а то тебе советов накидают, а потом окажется, что тебе нужно совсем другое.



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

Текущий архив: 2004.12.05;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.03 c
14-1100697719
_none_
2004-11-17 16:21
2004.12.05
как сравнить 2 переменных типа TGUID...


1-1100693333
denis24
2004-11-17 15:08
2004.12.05
разбивка числа на разряды


1-1100820152
noob
2004-11-19 02:22
2004.12.05
loop


1-1101109369
Chery
2004-11-22 10:42
2004.12.05
Не работают функции на сервере при Borland Socket - служба.


3-1099923051
DSKalugin
2004-11-08 17:10
2004.12.05
план выполнения запроса. индексы