AHDPE |
Отправлено: 08.03.2005, 17:30 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 25
|
Открываю таблицу *.dbf через TTable. Необходимо отсортировать таблицу по какому-то полю. |
|
Gedeon |
Отправлено: 09.03.2005, 12:24 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Как по мне, так проще TTable заменить на TQuery и явно в запросе указать инструкцию ORDER BY, правда я не силен в дбф, но вроде так.
|
|
olegenty |
Отправлено: 09.03.2005, 12:28 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
как вариант — открывать таблицу не через TTable, а через TQuery с инструкцией ORDER BY
индексы создаются посредством инструкции CREATE INDEX
BDE эти инструкции поддерживает
|
|
AHDPE |
Отправлено: 10.03.2005, 21:48 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 25
|
Понятно, попробую через TQuery. |
|
AHDPE |
Отправлено: 12.03.2005, 09:41 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 25
|
Что-то я не пойму, создаю такой запрос
CODE | Select torg_date, name, base, exec_date, day_end, quotation from F_OBL.DBF;
INSERT INTO f_obl.dbf
(torg_date,name,base,exec_date.day_end,quotation)
VALUES
('04.02.1996', '21057-1602', 'SU21057RMFS', '16.02.1996', '17.04.1996', '91.11');
ORDER BY torg_date;
|
и компилятор Builderа выдает ошибку, что не может разобрать слово INSERT. |
|
Gedeon |
Отправлено: 12.03.2005, 10:49 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Ну, давно я так не веселился, если надо выбрать записи на какой лях тут INSERT?
SQL | Select torg_date, name, base, exec_date, day_end, quotation from F_OBL.DBF ORDER BY torg_date; |
Так пробуйте.
А вообще для работы с базами данных на более-менее нормальном уровне почитайте хоть какую-ниюудь книгу по SQL.
|
|
AHDPE |
Отправлено: 12.03.2005, 11:07 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 25
|
Вообще-то мне надо вставить новую запись в таблицу, а потом отобразить ее на мониторе.
Отредактировано AHDPE — 12/03/2005, 11:09 |
|
Gedeon |
Отправлено: 12.03.2005, 11:31 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Ну тогда берите и вставляйте сначала с помощью например TADOComand (или что там у Вас) т.е.
CODE |
ADOCommand1->CommandText = "INSERT INTO f_obl.dbf (torg_date,name,base,exec_date.day_end,quotation)
VALUES
('04.02.1996', '21057-1602', 'SU21057RMFS', '16.02.1996', '17.04.1996', '91.11')";
ADOCommand1->Execute(); |
А потом уже выбирайте с помощбю выше приведенного запроса.
Просто научитесь понимать, что делает сервер при выполнении того или иного запроса, и что надо Вам. Ну и все ж подчитайте книгу по SQL, самому же легче будет.
|
|
AHDPE |
Отправлено: 12.03.2005, 11:42 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 25
|
Т.е. каждый новый запрос надо выполнять поочереди, а один запрос, состоящий из INSERT и SELECT за один раз выполнить нельзя ? |
|
Gedeon |
Отправлено: 12.03.2005, 12:18 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Да, вообще-то можно, только просто не понятно зачем такие операции обьединять, где-нить потом и проблемы могут начаться, сразу вроде не присутсвующие. Вот так только это делается
CODE | INSERT INTO f_obl.dbf
(torg_date,name,base,exec_date.day_end,quotation)
VALUES
('04.02.1996', '21057-1602', 'SU21057RMFS', '16.02.1996', '17.04.1996', '91.11');
Select torg_date, name, base, exec_date, day_end, quotation from F_OBL.DBF ORDER BY torg_date; |
Т.е. сначала инсерт, потом сэлэкт, только все же советую 30 раз подумать прежде чем так сделать, ИМХО нет смысла обьединять такие операции.
Наприемер если датасет при разработке Active=true; то при запуске приложения одна строка уже влетает в базу, далее, нет возможности обновить данные при таком запросе с помощью Requery() только закрытие-открытие и при этом вставка строки, устроит ли Вас такая работа, все ли упомните потом?
Отредактировано Gedeon — 12/03/2005, 10:25
|
|
AHDPE |
Отправлено: 12.03.2005, 12:49 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 25
|
Новая запись создается когда пользователь нажимает на кнопку:
CODE | Query1->SQL->Clear();
Query1->SQL->Add("insert into F_OBL.DBF(torg_date,name,base,exec_date.day_end,quotation) values ('04.02.1996','21057-1602','SU21057RMFS','16.02.1996','17.04.1996','91.11');");
Query1->SQL->Add("Select * from f_obl.dbf order by torg_date");
Query1->Open(); |
Но выдается ошибка — select не распознается. |
|
Gedeon |
Отправлено: 12.03.2005, 12:54 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Ну во первых напишите что за ошибка выдается, попробуйте разными запросами выполнить, я не силен в ДБФ, может там это не поддерживается, да если используете Query, то для инсерт — ExecSQL() т.к. не возвращает данные, для SELECT — Open(); это если в разных запросах, если вместе open() работает, но у меня, проверьте по отдельности.
Отредактировано Gedeon — 12/03/2005, 10:55
|
|
AHDPE |
Отправлено: 12.03.2005, 13:06 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 25
|
Попробовал вот так:
CODE | Query1->SQL->Clear();
Query1->SQL->Add("insert into F_OBL.DBF(torg_date,name,base,exec_date.day_end,quotation) values ('04.02.1996','21057-1602','SU21057RMFS','16.02.1996','17.04.1996','91.11');");
Query1->ExecSQL();
|
Выдает ошибку: EDBEngineError whith message 'Invalid parameter'
Если использовать Query1->Open(); то результат тот же.
|
|
Gedeon |
Отправлено: 12.03.2005, 13:33 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Ну, тогда читайте про синтаксис скл вашей БД, тут я уже не помошник, но судя по ошибке Вы ей неправильно дату скармливаете, посмотрите в каком она д.б. виде.
|
|
AHDPE |
Отправлено: 12.03.2005, 13:46 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 25
|
Да, вы правы. Я сократил запрос:
CODE | Query1->SQL->Clear();
Query1->SQL->Add("insert into F_OBL.DBF(quotation) values ('0.05');");
Query1->ExecSQL(); |
Новая запись добавляется, но после этого таблица не отображается на форме.
Я сделал такой запрос:
CODE | Query1->SQL->Clear();
Query1->SQL->Add("insert into F_OBL.DBF(quotation) values ('0.05');");
Query1->SQL->Add("select * from f_obl.dbf");
Query1->ExecSQL(); |
Выдается такая ошибка: Invalid use of keyword. Token :select .... |
|
Gedeon |
Отправлено: 12.03.2005, 14:29 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Если сэлэкт, то используйте Open() т.к. метод ExecSQL() в Query используется для выполнения запросов не возвращающих данные
|
|
AHDPE |
Отправлено: 12.03.2005, 14:47 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 25
|
Я использовал Open() вместо ExecSQL(), но ошибка таже.
Компилятор не понимает второй запрос. |
|
AVC |
Отправлено: 14.03.2005, 09:26 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Есть сервера, клторые текст типа
Insert ....;
Select ...;
в одном запросе не понимают. Следовательно лучше их не объединять в одну команду на уровне SQL текста (или написать свой "разбивщик" текста на атомарные запросы — очень полезная штука). |
|