![]() |
|
Модераторы: Akina |
![]()
|
|
| Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: 7 Всего: 23 |
НА форме DataGrid и Adodc. Связал с *.dbf. Свойства DataGrid на удаление, обновление, добавление новых значений = True. ConnectionString: DSN=DELO, CommandType = 2 - adCmdTable, RecordSource=DELO.
При по попытке изменить значение в ячейке происходит ошибка: Error occered while trying to update record. "Во время обновления записи произошла ошибка". Добавлено @ 17:32 Хотя проблема уже описывалась на http://forum.vingrad.ru/index.php?showtopi...d=1&hl=datagrid но ответа там нет. -------------------- i_i (';') (V) ![]() |
|||
|
||||
| Kergan |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.8.2005 Репутация: 3 Всего: 5 |
Можешь попробовать найти TDBgrid - контрол такой, типа DataGrid, но КУДА лучше и стабильнее. Я с ним работаю, никаких проблем, все корректно, в т.ч. проверка правильности введнных данных и прочие мелочи. Скачать его едва ли можно, он довольно большой, с разными библиоеками, а вот у добрых людей с дисками за 70р...
--------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :( |
|||
|
||||
| Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: 7 Всего: 23 |
-------------------- i_i (';') (V) ![]() |
|||
|
||||
| Kergan |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.8.2005 Репутация: 3 Всего: 5 |
Не знаю, где ты откопал чисто дельфийскую версию, но TDBgrid - это нормальный ActiveX, спокойно работающий в Basic'e... соберу либы, попробую отправить.
--------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :( |
|||
|
||||
| Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: 7 Всего: 23 |
-------------------- i_i (';') (V) ![]() |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
kergan и мне кань нб [email protected]
|
|||
|
||||
| Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: 7 Всего: 23 |
-------------------- i_i (';') (V) ![]() |
|||
|
||||
| Kergan |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.8.2005 Репутация: 3 Всего: 5 |
А-а-а, поздравлю. Вот только проблемы еще будут с переносимостью, по себе знаю. Контрол кинул. Нужен или нет - решай сам.
--------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :( |
|||
|
||||
| Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: 7 Всего: 23 |
И еще вопрос: как сделать так, чтобы юзер правил ячейки, как ему вздумается, но в БД в это время ничего не изменялось, потом он нажмет кнопку "Сохранить изменения" - ну и все изменения вступают в силу
-------------------- i_i (';') (V) ![]() |
|||
|
||||
| Kergan |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.8.2005 Репутация: 3 Всего: 5 |
Сделай через вторую таблицу. Потом их перекопируешь. Пример:
юзер меняет Таблицу_Рабочую юзер кликает СОХРАНИТЬ Из Таблицы_Рабочей копируем в Таблицу_Куда_Желаем_Сохранить Разумеется обе таблицы должны иметь одинаковую структуру. ЗЫ если мне память не изменяет, встроенных накопителей, чтобы организовать вышеуказанный алгоритм, нет в DBGrid (и в TDBGrid тоже). Но это не так уж и сложно. --------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :( |
|||
|
||||
| Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: 7 Всего: 23 |
-------------------- i_i (';') (V) ![]() |
|||
|
||||
| Kergan |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.8.2005 Репутация: 3 Всего: 5 |
Ну да. В моем способе примерно то же - только резервной является не вся база, а таблица.
А, кстати, какой будет Точка Восстанавления? Исходная пустая структура или последнее нажатие на кнопу "применить"? --------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :( |
|||
|
||||
| Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: 7 Всего: 23 |
-------------------- i_i (';') (V) ![]() |
|||
|
||||
| Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: 7 Всего: 23 |
У меня еще проблема с этим True DBGrid'ом: в других Гридах при щелчке мышой сразу появляется номер выбранного столбца, как сделать так, чтобы юзер щелкал по заголовку столбца и сразу показывался номер столбца, а не со второго раза.
В общем работает, только шифт надо держать:
-------------------- i_i (';') (V) ![]() |
|||
|
||||
| Kergan |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.8.2005 Репутация: 3 Всего: 5 |
Там индекс выдается в событиях BeforeColUpdate и AfterColUpdate. В принципе перейти от события клика к этим событиям (их назначение, думаю, понятно) не сложно. ИМХО они удобнее кликов.
--------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :( |
|||
|
||||
| Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: 7 Всего: 23 |
Я все не пойму, как скопировать выбранный столбец первой таблицы в столбец другой таблицы. У этого объекта есть свойство обратиться к элементу в Гриде, как к элементу матрицы или нет?
Кажется я понял, в чем была ошибка с MS DBGrid - если удалить ячейку с текстовым полем, то все равно - пусто в ней или есть какое-то значение, чего не сделаешь с полем, в котором число - если удалил число, то надо заменить его на 0, без разницы целое, дробное оно и т.д. Добавлено @ 20:18 Исчерпывающее описание: http://www.vbnet.ru/articles/Showarticle.aspx?id=195 -------------------- i_i (';') (V) ![]() |
|||
|
||||
| Kergan |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.8.2005 Репутация: 3 Всего: 5 |
Можно. Сначала - к столбцу, потом к ячейке. Или к строке, потом к ячейке (вроде бы так). Можно оперировать целыми столбцами и строками. А за мануал спасибо. У меня такойже, только на немецком --------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :( |
|||
|
||||
| Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: 7 Всего: 23 |
Вот этот код не работает, мне надо, чтобы столбец из Grid'a (любого - Flex или Data) сохранялся в БД.
Уж скока всего перепробовал и по 2 Data-обекта все бестолку. -------------------- i_i (';') (V) ![]() |
|||
|
||||
| Kergan |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.8.2005 Репутация: 3 Всего: 5 |
Я бы предложил каждый раз перекопировать базу...
Т.Е. у тебя (давай на ты) есть база, которую юзер меняет непосредственно - BASA1. Есть та, которую ты сохраняешь по клику - BASA2. Ну, копируй по клику BASA1 в BASA2? Ведь TDBgrid работает с базой напрямую - как Аксес, любое изменение в нем мгновенно сохраняется. Если долго копирует можно маленький сплэш-скрин (даже без прогресс бара, просто с мелкой анимашкой и надписью) "идет обновление структуры базы". Или ты хочешь сказать, что при работе база ВООБЩЕ не меняется? Это сообщение отредактировал(а) Kergan - 19.10.2005, 15:03 --------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :( |
|||
|
||||
| Voldemar2004 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: 7 Всего: 23 |
Короче я делаю так: есть TDBgrid1 и Data1 - в них отображается главная БД. И есть TDBgrid2 и Data2 - в них отображается SQL-запрос, т.е. "SELECT [поле 1,2,3,4] FROM DELO". З.Ы. Кажется я сделал то, что требуется, но работает только все наоборот - таблица с БД правится, тока это не та таблица - а главная. Короче буду разбираться. -------------------- i_i (';') (V) ![]() |
||||
|
|||||
| Kergan |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.8.2005 Репутация: 3 Всего: 5 |
Если надоест разбираться, напиши поподробнее о своей проблеме и кинь базу, подолбимся вместе!
--------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :( |
|||
|
||||
| Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: 7 Всего: 23 |
Вот код, который подсчитывает число строк в таблице, осталось сделать только переход на последнюю строчку с помощью TDBGrid2.EditActive = True. Вся фишка в следующеем: (я сам дошел до этого): считаем число строк и последнюю строку выделяем, как-будто хотим ее отредактировать, потом просто сохраняем таблицу.
Последняя строка не хочет быть активной. -------------------- i_i (';') (V) ![]() |
|||
|
||||
| Kergan |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.8.2005 Репутация: 3 Всего: 5 |
Я че-т не понял. Получается, изначально у тебя с БД TDBgrid НЕ соединен т.е. записи строятся простым запросом, без обратной связи. Когдя работают мои проги с гридом, они напрямую меняют базу и задача кнопы СОХРАНИТЬ сводится к копированию базы в бэкап файл. Когда грузится форма с Гридом, то бэкап файл копируется с именем рабочей базы (на случай, если юзверь че-то изменил, потом сохранил, потом опять изменил и без сохранения вышел).
Код на Form_load такой (здесь код работы с mdb):
У TDBGrid св-во RecordSource = Data1 У Data1 св-в не менял. Это сообщение отредактировал(а) Kergan - 21.10.2005, 14:49 --------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :( |
|||
|
||||
| Voldemar2004 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: 7 Всего: 23 |
Я сначала подумал, что лучше будет метод драг-н-дроп, но потом сам написал вот это:
кстати, очень богатый мануал к TrueDBGrid - может перевести его? вывалить на форум + дистрибутив
мне осталось только улучшить этот код: сейчас в БД добавляется только тот столбец, который я выбрал, как сделать так, чтобы сразу вводились 4 поля: SELECT NOM, WO, WO1, WO2 FROM DELO.
-------------------- i_i (';') (V) ![]() |
||||
|
|||||
| Voldemar2004 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: 7 Всего: 23 |
И еще вопрос: помните в C++ Builder 5 на вкладке DataAccess (доступ к данным) есть объекты TDataSource и TTable, в VB 6/.NET есть их аналог или только Data, Adodc соответственно? Это сообщение отредактировал(а) Voldemar2004 - 23.10.2005, 12:50 -------------------- i_i (';') (V) ![]() |
||||
|
|||||
| Kergan |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.8.2005 Репутация: 3 Всего: 5 |
Только я рекомендую ПОЛНОСТЬЮ коннект устанавливать в form_load - в том числе имя базы в data, тип соединения и самое важное - связывание data и tdbgrid. Иначе будет потом гемарой - не будет чапать на половине машин т.к. грид обратится к data РАНЬШЕ, чем data - к базе данных. Такой баг мне много крови попортил когда-то...
--------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :( |
|||
|
||||
| Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: 7 Всего: 23 |
У меня опять появились вопросы по DataGrid: на форме 2 ADODC (adodc1 и adodc2), DataGrid1 и DataGrid2 соответственно. RecordSource для DataGrid1 = adodc1, для DataGrid2 = adodc2 открываем файлы *.mdb в первом AdoData (вообще-то в моем случае все немного сложнее - это я для наглядности). Другую БД в во втором AdoData:
если нажать на кнопку проихсодит добавление выбранного столбца 1-ой таблицы в выбранный столбец 2-ой таблицы, НО: только в самый конец строк 2-ой таблицы, а НАДО, чтобы заполнение начиналось с 1-ой строки, т.е.: сейчас работает вот так: 1-ая таблица: 2-ая таблица (1-ый столбик - ПУСТОЙ): | 1 | 0 | 0 | | | 0 | 0 | 0 | | 2 | 0 | 0 | | | 0 | 0 | 0 | | 3 | 0 | 0 | | | 0 | 0 | 0 | | 4 | 0 | 0 | | | 0 | 0 | 0 | копирую 1-ой стоблец 1-ой таблицы в 1-ый столбец 2-ой таблицы: получается вот это: | 1 | 0 | 0 | | | 0 | 0 | 0 | | 2 | 0 | 0 | | | 0 | 0 | 0 | | 3 | 0 | 0 | | | 0 | 0 | 0 | | 4 | 0 | 0 | | | 0 | 0 | 0 | ___________1 ___________2 ___________3 ___________4 А требуется, чтобы было так: | 1 | 0 | 0 | | 1 | 0 | 0 | 0 | | 2 | 0 | 0 | | 2 | 0 | 0 | 0 | | 3 | 0 | 0 | | 3 | 0 | 0 | 0 | | 4 | 0 | 0 | | 4 | 0 | 0 | 0 | Не пойму, что не так работает в моей коде. Это сообщение отредактировал(а) Voldemar2004 - 31.10.2005, 21:45 -------------------- i_i (';') (V) ![]() |
|||
|
||||
| Voldemar2004 |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: 7 Всего: 23 |
Это у всех так? Или только у меня такая проблема? Если число записей (строк) > 1000. Хотя я сам написал ф-цию, которая нормально работает:
И еще: не копирует первую выбранную строку из Grid1 в Grid2
хотя я знаю что должно быть так:
-------------------- i_i (';') (V) ![]() |
||||||||
|
|||||||||
| Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: 7 Всего: 23 |
Voldemar2004, вот исправленный код:
Все работает без ошибок. Но только при условии, что число строк первого грида = или > числа строк 2-го грида. Причем я заметил, что если не делать лишних DataX.Recordset.Update (что впрочем надо для того, чтобы юзер видел, что прога работает) - копирование происходит гораздо быстрее. Это я к тому, что если кому-нибудь понадобится, то не спотыкались на тех же граблях, что и я. P.S. Причем Apex True DataGrid (не OLE) не требует ADO (хватит и Data)- что тоже прибавляет скорости работы. -------------------- i_i (';') (V) ![]() |
|||
|
||||
![]()
|
| Правила форума "VB6" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB6 | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |