powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / "Database not in edit or insert mode" Error ((
27 сообщений из 27, показаны все 2 страниц
"Database not in edit or insert mode" Error ((
    #32832090
maxtar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
OraQuery4->SQL->Text="select * from preps where preps_name='"+DBGridEh1->Fields[0]->Text+"'";
OraQuery4->ExecSQL();
OraQuery4->First();
DBGridEh1->Fields[ 2 ]->Text=OraQuery4->FieldByName("preps_pack_vew")->AsString;
//Edit1->Text=OraQuery4->FieldByName("preps_pack_vew")->AsString;
OraQuery4->Close();

В Обычный едит вставляет, а в грид не хочет (
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32832117
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBGridEh1 у вас привязан к датасету, который не в едит ор инсерт моде.
Отсюда и ошибка.
ЗЫ
странный у вас какой то подход в работе с DB-aware компонентами, иль я чё не понимаю
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32832125
maxtar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно и странный подход но другого подхода найти не смог! Этот квери возращает одну лишь всего запись для вставки в поля грида уже определенных значений из другой таблицы! А сам грид связан с другим датасетом!
Пробовал все где видел в свойствах ЕДИТ или ИНСЕРТ поставить в тру (тоже странный подход) )) Но никаких сдвигов (
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32832132
Steppenwulf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OraQuery4->First();
OraQuery4->Edit();
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32832133
13th_apostle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zalexakaстранный у вас какой то подход в работе с DB-aware компонентами, иль я чё не понимаю
а в чем именно выражается странность? сорри, просто у меня примерно тот же подход. и если он не оптимальный, хотелось бы знать =)).
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32832142
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxtarВозможно и странный подход но другого подхода найти не смог! Этот квери возращает одну лишь всего запись для вставки в поля грида уже определенных значений из другой таблицы! А сам грид связан с другим датасетом!
Пробовал все где видел в свойствах ЕДИТ или ИНСЕРТ поставить в тру (тоже странный подход) )) Но никаких сдвигов (
сдвиг произойдёт когда вы перед:
Код: plaintext
DBGridEh1->Fields[ 2 ]->Text=OraQuery4->FieldByName("preps_pack_vew")->AsString;
вызовете Insert или Edit метод датасета к которому привязан ваш DBGridEh1.
Удачи.
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32832146
maxtar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
OraQuery4->First();
OraQuery4->Edit();

Никаких изменений! Да и Не причем тут это! Квери тока возврщает строку которая в обычные Едитбокс вставляется а в грид не хочет! Причем руками если изменять данные в гриде то ничего не говорит!
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32832218
maxtar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Zalexaka
Сдвиг произошол... ошибка больше не вылетает... только тупит както. Курсор с часами и надписью скуэль висит, все нажимается работает, но через некоторое время вылетает с другой ошибкой, и в памяти до 48мегов вырастает... ->Edit() Может както нужно закрывать?

А вообще Есть ли другой способ сделать то что я делаю. Недавно писал, видимо не совсем понятно написал. Нужно заполнять грид наполовину из другой таблицы, и получается что при каждой новой строке приходится обращаться к базе. Как это при плохом коннекте то будет?

Вопросов куча..... (
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32832608
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxtarВозможно и странный подход но другого подхода найти не смог! Этот квери возращает одну лишь всего запись для вставки в поля грида уже определенных значений из другой таблицы! А сам грид связан с другим датасетом!
Хм. Видите ли, есть паттерн Model - View - Controller. Так вот, DBGrid - это View, а Ваши изменения данных нужно выполнять в модели, то есть в DataSet-е, питающем грид.

maxtarА вообще Есть ли другой способ сделать то что я делаю. Недавно писал, видимо не совсем понятно написал. Нужно заполнять грид наполовину из другой таблицы, и получается что при каждой новой строке приходится обращаться к базе. Как это при плохом коннекте то будет?
Если сейчас Вы сформулировали хорошо - то правильным будет написать SQL-запрос, который возвращает нужный Вам набор "слитых" записей из двух таблиц.
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32832691
maxtar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
Хм. Видите ли, есть паттерн Model - View - Controller. Так вот, DBGrid - это View, а Ваши изменения данных нужно выполнять в модели, то есть в DataSet-е, питающем грид.


Это понятно. Вопрос в том, что в грид нужно ввести какието данные чтобы записать в таблицы, половина данных должна вставиться из другой таблицы в зависимости от значения первого поля, но строго одна строка, другая половина вводится вручную и высчитывается из того что ввели вручную и из того что вставилось из второй таблицы! Ух! Запутал наверное опять. Вот, а всталять тем образом, которй я изложил выше, не дает.

авторЕсли сейчас Вы сформулировали хорошо - то правильным будет написать SQL-запрос, который возвращает нужный Вам набор "слитых" записей из двух таблиц.

Так сейчас и есть! Информация из этого запроса служит для рассчета значений других ячеек в соответствии с тем что введено вручную! А получается что для каждой строки будет отсылаться запрос на сервер (связь может быть модемная). Вопрос в том сколько будет ждать пользователь после выбора значения!

Большое спасибо за ответы! И извините если окончательно запутал )
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32832822
maxtar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, в общем один вопрос. Как вставить в ячейку грида значение из другого датасета, не в базу, не в датасет, просто чтобы это значение отображалось?
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32832842
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxtar softwarerХм. Видите ли, есть паттерн Model - View - Controller.

Это понятно. Вопрос в том, что в грид нужно ввести какието данные чтобы записать в таблицы,
Уже не так. Данные в любом случае вводятся в модель - в DataSet. Он может получить их запросом, после чего в них могут быть внесены изменения, методом Edit/Assignment/Post.

Давайте я попробую описать две вещи, а Вы решите, какую из них Вы имеете в виду.

Во-первых, в лучшем случае Вы имеете в виду операцию lookup. Выглядит это примерно так: у Вас есть данные в гриде, Вы их редактируете, и нажимаете, допустим, на кнопку "Договор". Выскакивает список договоров, Вы выбираете нужный, и в результате в Ваши данные подставляются id договора, а также куча вторичных полей - номер, тип, контргагент, дата и так далее - все, что Вы хотите показать в гриде по этому договору.

Делается это именно что описанным выше образом - Edit(если нужен) -копирование значения полей - Post (если нужен).

В худшем же случае Вы имеете в виду следующее: Вам нужно получить сводную информацию (например, из таблиц "Договор" и "Контрагент"), Вы сделали запрос к таблице "Договор" и теперь к каждой ее строке хотите присобачить результат запроса к таблице "Контрагент".

Это делается именно что sql-запросом к двум таблицам.
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32832846
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxtarГоспода, в общем один вопрос. Как вставить в ячейку грида значение из другого датасета, не в базу, не в датасет, просто чтобы это значение отображалось?
Никак. DBGrid отображает данные, находящиеся в датасете. Точка.

На самом деле, конечно, можно. Есть много инструментов для решения задач. Опишите задачу, которую Вы решаете - не "как вставить", а что Вы вообще хотите сделать.
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32832939
maxtar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВо-первых, в лучшем случае Вы имеете в виду операцию lookup. Выглядит это примерно так: у Вас есть данные в гриде, Вы их редактируете, и нажимаете, допустим, на кнопку "Договор". Выскакивает список договоров, Вы выбираете нужный, и в результате в Ваши данные подставляются id договора, а также куча вторичных полей - номер, тип, контргагент, дата и так далее - все, что Вы хотите показать в гриде по этому договору .

Почти! Ввод товаров в накладную:
Есть грид, но он пустой. В первом поле находится комбобокс, значения пиклиста которого загоняются при открывании формы запросом к таблице товаров (в которой как раз и находятся все характеристики цена, производитель и тд) и выбором одного столбца с наименованием. Пользователь вводя в накладную новую позицию выбирает из этого комбобокса значение, тоесть наименование товара, и после того как он выходит из ячейки, другие ячейки грида, такие как цена за единицу, имя упаковки, сколько штук в упаковке и тп, должны принять значения соответстнно записи в таблице с товарами. А еще есть такие ячейки, в которые нужно вводить руками, например "количество заказываемого товара", и после ввода в это поле считается ячейка общей суммы за эту позицию, а уже потом можно заносить все в таблицу.
Таблиц тут три. Первая "накладная" содержит информацию о самой накладной, такую как: ее номер, кому, от кого, и т.д.
Вторая "запись в накландой" содержит как раз товары из таблицы товаров, и связанная с "накладная" по полю номера накладной.

Вот такая вот ситуаци! Очень благодарен Вам за участие в решении моей проблемы!
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32832990
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда ситуация такова. На уровне "для чайников" борландеры предлагают для этого хрень, которая называется lookup fields. Делается она примерно так: делаете dataset с запросом к таблице товаров, а в dataset-е позиций накладной в визуальном редакторе создаются эти самые поля, которым указан lookup dataset и что и как из него выбирать.

Механизм вообще-то дрянной, переоткрывающий lookup dataset по каждому чиху и соответственно, сильно тормозящий. В то же время, полагаю, его можно использовать, если данные из таблицы товаров загнать в память - например, использовав TClientDataSet.

Более же обычное решение - именно что то, что я написал в предыдущем письме. То есть примерно то же, что делаете Вы, но работа непосредственно с DataSet-ом. И нужно обратить внимание на состояние датасета и логику, которую Вы хотите "зашить". Тут есть два варианта: либо операция "выбрать товар" должна быть недоступна, пока не начато редактирование, либо же код должен проверять состояние датасета, и при необходимости делать Edit.
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32835019
maxtar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С гридом все понятно... Но так и остался вопрос открытым, как присваивать ячейкам значения не изменяя набора данных. Так сказать подготовить данные к вставке в таблицу! Можно ли для этих целей использовать StringGrid?
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32835495
maxtar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все нормально... изменяя ОраКвери сам! Просто код висел на отрисовке ячейки и он вис... Повесил на ОнАпдэйт, теперь тормозит сам запрос, тоесть выполняется, но с предыдущим значением Where. Собственно вот этот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
void __fastcall TForm4::DBGridEh1Columns0UpdateData(TObject *Sender,
      AnsiString &Text, Variant &Value, bool &UseText, bool &Handled)
{
/////////////////////Âñòàâêà ñâîéñòâ ïðåïàðàòà â ïîëÿ/////////////////////////
OraQuery4->SQL->Text="select * from preps where preps_name='"+DBGridEh1->Fields[0]->Text+"'";
OraQuery4->ExecSQL();
OraQuery4->First();
Edit1->Text=OraQuery4->SQL->Text;
OraQuery2->Edit();
OraQuery2->FieldByName("NAKL_KOROB_VIEW")->Text=OraQuery4->FieldByName("preps_pack_vew")->AsString;
OraQuery2->FieldByName("NAKL_ITEM_COST")->Text=OraQuery4->FieldByName("preps_cost")->AsFloat;
//OraQuery2->Prepare();
OraQuery4->SQL->Clear();
OraQuery4->Close();
/////////////////////////////////////////////////////////////////////////////
}

И еще один вопрос! Как скажется на скорости работы обращение к базе при вводе каждой новой строки?
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32836314
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю, как делает большинство, а я делаю примерно так:
1) При добавлении нового материала (или изменении существующей позиции)
вызывается диалоговое окошко, в котором заполняются (изменяются) необходимые реквизиты . В поле, где необходимо указать материал, вводится сторка (контекстная). Далее по этому контексту строки выбирается список материалов (если в комбобокс грузить сразу весь справочник, то будет тормозить, если справочник большой) из которого пользователь выбирает необходимый. При выборе материала догружаются доп данные по материалу в поля диалогового окошка (через sql-запрос)
2) Для сохранения данных в БД использую хранимую процедуру, в которую передаю необходимые параметры. В хранимой процедуре также осуществляется необходимый контроль за коррекностью введенных данных.
3) В случае успешной транзакции изменения данных, обновляю рекордсет (ну и грид тоже с последующим позиционированием на добавленной(измененной) записи)
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32836452
maxtar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Alex_VC
Все тоже самое, только в гриде! Вопрос в том как долго будут именно догружаться при, допустим, плохой модемной связи (~24 кб\с). Очень интересно было бы услышать от Вас (если конечно используется удаленное соединение).
Мне кажется что это наиболее правильно... Но тетеньки за 4 года настолько привыкли, что по иному, мою программу не имеет смысла доводить до конца.

2 all
Вы уж меня простите но вопрос за вопросом.
На рисунке (если присоединился) Поле 1 является первичным ключом для таблицы с общей информации по накладной, Поле 2 это форейн кей в таблице с записями в накладной. При добавлении новой накладной сначала вводится информация общая, а позиции вводятся в грид. Проблема в том что общая информация не заносится в таблицу с накладными, в то время как при вводе в грид записи вставляются сразу, из-за чего возникает нарушение целостности по общему ключу, типа нет записи с таким NAKL_NUM. Пуду очень благодарен за советы! И извените если все это флуд! Спросить больше не укого!
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32836802
Guest?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я не понел ты добавление прямо на гриде делаеш ?
лучше всего по моему метод который описал Алекс_ВС .. а грид я бы на твоем месте только для чтения сделал бы .. поменьше проблем будет ;) (можно дополнительно еще и таблицу только для чтения сделать но через модемную связь думаю добавить новые данные тогда медленнее будуть .. и тем более нужно кешировать данные а потом апдейт сделать ;))
с уважением
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32836972
maxtar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторя не понел ты добавление прямо на гриде делаеш ?
Да! Вот и возникают вопросы. Это совсем плохая практика? Лучше делать диалоговое окно на каждую строку? А в нем уже все подсчеты делать? Вообще, так делает ктонибудь? Ой ужас сколько вопросов.... Там ведь что вводится руками так это только количество коробок, откуда геморой может быть? Все, я окончательно запутался! Может кто скажет как реализуется данная задача. Она ведь, на мой взгляд, самая распространенная!
Спасибо!
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32837411
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxtarС гридом все понятно... Но так и остался вопрос открытым, как присваивать ячейкам значения не изменяя набора данных. Так сказать подготовить данные к вставке в таблицу! Можно ли для этих целей использовать StringGrid?
Можно, но редко когда нужно. Поскольку именно набор данных представляет кэш, готовящий данные к вставке в удаленную таблицу. Можно повторить этот код самостоятельно, но смысла в этом я не вижу.

maxtarИ еще один вопрос! Как скажется на скорости работы обращение к базе при вводе каждой новой строки?
При вводе - скорее всего, непринципиально. Проблемы будут при обращениях для отображения информации.

Кстати, я вроде бы уже говорил насчет параметров. Так Вы здорово тормозите сервер и закладываете возможность ошибки, включая взлом Вашей программы через SQL Injection).

maxtarДа! Вот и возникают вопросы. Это совсем плохая практика? Лучше делать диалоговое окно на каждую строку?
Зависит от данных и требуемого функционала. В общем, чем больше навешано в этом месте - тем больше смысла делать отдельное окно.
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32838089
Guest?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы сделал отдельно ;) проблем будеть меньше ...
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32838441
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет скорости работы по удаленному (модемному) соединению: тут либо надо использовать что-то типа терминального сервера: у пользователя установлен терминал, запускающий Вашу программу на сервере (по сетке гоняются только экраны, все вычисления - на сервере), либо написать свое приложение типа клиент-сервер с оговоренными выше способностями, ну или организовать это дело в виде web-приложения (все формы - в виде страничек, - обработка - на сервере). Все это - в режиме реального времени.
Можно организовать оффлайн (например, через какие-то буфера, которые потом подкачиваются в основную БД). Но здесь возникает проблема с синхронизацией данных (долговременные транзакции, их обработка и т.д.).
Вообщем, заморочки будут везде.
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32838563
Guest?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати можеш для клиент сервера юзать Interbase обычно поставляется вместе с бильдером какая то версия .. но если подключений будеть больше 5 нужна будеть тебе лицензию приобрезти..

из того что сами делали ;)
или какую то прогу писали что бы обработал запросы на стороне сервера (обычно) редко как страницы на веб сервере ;)
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32844228
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_VCНасчет скорости работы по удаленному (модемному) соединению: тут либо надо использовать что-то типа терминального сервера: у пользователя установлен терминал, запускающий Вашу программу на сервере (по сетке гоняются только экраны, все вычисления - на сервере), либо написать свое приложение типа клиент-сервер с оговоренными выше способностями, ну или организовать это дело в виде web-приложения (все формы - в виде страничек, - обработка - на сервере). Все это - в режиме реального времени.
И что заставляет Вас полагать, что это будет быстрее?

Что касается "гонять экраны": RAdmin весьма развитая в этом смысле программа, но при коннекте 9600 даже кликать мышкой уже несколько неприятно.

Что касается web: подсчитайте траффик, который уйдет на передачу, допустим, десяти строк по пять чисел (запись в виде текста, цветошрифтовое оформление, <td> и прочие служебные тэги) и сравните это с, допустим, "200 байт плюс служебная информация" в случае передачи по более эффективному протоколу.
...
Рейтинг: 0 / 0
"Database not in edit or insert mode" Error ((
    #32844376
maxtar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИ что заставляет Вас полагать, что это будет быстрее?

Что касается "гонять экраны": RAdmin весьма развитая в этом смысле программа, но при коннекте 9600 даже кликать мышкой уже несколько неприятно.

Что касается web: подсчитайте траффик, который уйдет на передачу, допустим, десяти строк по пять чисел (запись в виде текста, цветошрифтовое оформление, <td> и прочие служебные тэги) и сравните это с, допустим, "200 байт плюс служебная информация" в случае передачи по более эффективному протоколу.

По модему, имелось ввиду соединение с провайдером, через интернет тоесть, к выставленному наружу серверу.

авторКстати, я вроде бы уже говорил насчет параметров. Так Вы здорово тормозите сервер и закладываете возможность ошибки, включая взлом Вашей программы через SQL Injection).

В этом посте Вы имели ввиду параметры те что НЕ связываемые переменные? Типа этой строки?
Код: plaintext
OraQuery4->SQL->Text="select * from preps where preps_name='"+DBGridEh1->Fields[0]->Text+"'";

Если да то, как сделать это связываемой переменной? И вообще где почитать о них? Откудова они принимают значения? А то что читал говориться что нада использовать, а что и как нету.

Спасибо.
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / "Database not in edit or insert mode" Error ((
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]