Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Возможна ли докачка строк из таблицы MS Access?  (Прочитано 13343 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
KORVINKORI
Гость
« : 14-04-2009 13:57 » 

Люди! Помогите начинающему?
Вопрос вот в чем! Имеется таблица MS Access. В ней данные со временем не меняются, а идет только добавление строк с информацией. Таблица через некоторое время разрастается и выполнение команд
ADOTable1.Close;           
ADOTable1.Open;
начинает тормозить систему. Удалять старые строки в таблице нельзя. Жаль((    Есть ли способ без обновления старых строк подгружать появившиеся в таблице MS Access новые строки?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 14-04-2009 17:48 » 

KORVINKORI, попробуй не ADOTable, а ADOQuery - перебросить данные в таблицу (простую - не ADO!) совсем не сложно. В этом случае для получения новых строк нужен будет увеличивающийся идентификатор, чтобы запросить из базы строки с id > последнего наибольшего полученного значения, ну и добавить эти строки к концу таблицы.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
KORVINKORI
Гость
« Ответ #2 : 14-04-2009 17:59 » 

RXL, можешь по подробней рассказать? И какой нибудь маленький примерчик?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 14-04-2009 18:46 » 

Примеров не дам. Во-первых, пишу на BCB, а не Delphi (хотя API один), во-вторых, тут и так все просто.

1. Не используй ADOTable - используй какой-нибудь Grid, не работающий с БД.
2. Заполнять его придется руками: сперва выполнить запрос через ADOQuery и построчно занести в таблицу. При занесении строк запомни максимальный id.
3. Когда настанет необходимость "докачать" новые строки, выполни запрос (через тот же ADOQuery) с условием WHERE id > ...макс.значение... и добавь полученные строки в конец таблицы.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
KORVINKORI
Гость
« Ответ #4 : 14-04-2009 19:14 » 

RXL, это конечно хорошо, спасибо! Но это всего лишь теория! А на практике кто-нибудь реализовывал подобное? Ведь ни где в литературе нет Жаль(
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 14-04-2009 19:34 » 

KORVINKORI, Чего нет?
Нет обработки ADOзапроса?
или нету Grid'а?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 14-04-2009 20:36 » new

KORVINKORI, теория не проста, а очень проста. Остается только кинуть на форму пару компонент и поэкспериментировать.

Надеюсь, ты не думаешь, что мы будем за тебя код писать? Как начинающему, добрый совет: привыкай читать документацию. Нажми F1 и почитай об TADOTable и TGrid (или TStringGrid).
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 15-04-2009 05:51 » 

Код: (Text) с++
    TADOConnection *adoconn;
    TADOQuery *adoq;

Код: (C++)
        adoconn->ConnectionString = "....... твоя DNS строка ....";
        adoconn->Connected = true;

        adoq->SQL->Text = "SELECT * FROM mytable";
        adoq->Active = true;

        max_id = 0;

        while (!adoq->Eof)
        {
            id = adoq->FieldValues["id"];

            if (id > max_id)
                max_id = id;

            // Занесение данных текущей строки в таблицу

            adoq->Next();
        }

        adoq->Active = false;
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
KORVINKORI
Гость
« Ответ #8 : 16-04-2009 14:02 » 

RXL, еще раз спасибо!
Сделал примерно как у тебя, а затем докачка строк через WHERE id....(счетчик конечной строки мы же знаем)! ВСЕ ПОЛУЧИЛОСЬ!!!
С твоей подачи начал изучать еще и SQL! Я зык вроде ничего, но с ограничениями по возможностям. Например не могу понять как вывести из базы строку найденную по MAX значению в колонке. Причем всю таблицу мне выводить не надо, а только одну строку. А вообще можно SQL запросом получить MAX значение столбца? Не закачивая всю таблицу?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 16-04-2009 14:13 » 

table
id   name   
1    qwe
2    wer
select max(id) from table;

Вернет 2
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
KORVINKORI
Гость
« Ответ #10 : 16-04-2009 14:50 » 

Sla! Спасибо! Только что попробовал! Программа вывела максимальное значение в dbgrid! А как его взять в Delphi? Например присвоить => MAX_NV?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 16-04-2009 14:53 » 

KORVINKORI, ну а как ты заполняешь таблицу?
select max...
тебе вернет только одну строку
вот и получи ее в свое приложение
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
KORVINKORI
Гость
« Ответ #12 : 16-04-2009 14:55 » 

Sla! Там название столбца изменилось! => Expr1000
Записан
KORVINKORI
Гость
« Ответ #13 : 16-04-2009 15:16 » 

Получается так:

MAX_NV := Form1.ADOQuery1.FieldByName('Expr1000').AsString;

Настораживает что столбец сменил свое имя с Id на Expr1000. Это нормально? Как этого избежать? Или хотя бы предугадывать?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 16-04-2009 16:40 » 

select max(id) as id from table;
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
KORVINKORI
Гость
« Ответ #15 : 16-04-2009 17:05 » 

 Улыбаюсь) Спасибо всем!!!
С задачей справился!!!
Только Sla, после as нужно указывать имя отличное от табличного иначе машина ругается(((. Но то что имя можно контролировать, это отлично!

 Еще раз СПАСИБО! Улыбаюсь
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines