|
|
|
Builder+ADO+Postgres
|
|||
|---|---|---|---|
|
#18+
Бьюсь над дурацкой проблемой: Есть таблица в постгресе: 1-е поле id - автоинкремент, 2-е поле name - text В билдере используется ADOTable. Создаю новую запись, в которой соответственно заполняю name, а id ожидается что будет сам формироваться. В датасете таким образом появляется новая запись. Далее пытаюсь изменить в этой же записи name и получаю ошибку: "Не удается найти строку для обновления. Некоторые значения могли быть изменены со времени ее последнего чтения". В этот момент лезу в базу админкой и смотрю что там записалось. Там все нормально, включая id. Делаю вывод, что глюк где-то в датасете. Прочесал весь хелп вдоль и поперек - ничего не помогает. Там пишут, что после вызова метода Post(), датасет загружает обновленную информацию снова из базы, таким образом предполагаю, что это автоинкрементальное значение должно появиться в датасете, но нет его там! Как вообще датасет идентифицирует записи? Как работать с автоинкрементами? Получается, что на данный момент нет возможности добавлять записи без закрытия и затем открытия датасета. Но это же маразм. Если кто разобрался с этим - подкинте инфу, а лучше примеры. Заранее спасибо!!! Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2005, 01:38 |
|
||
|
Builder+ADO+Postgres
|
|||
|---|---|---|---|
|
#18+
Это -- классический дебилизм Дельфы (его TTable). Не умеет он понимать, что какие-то поля нельзя задавать при вставке, но значения их генерируются при этом. Это встречается на многих СУБД - Sybase, MSSQLServer. Рекомендую плюнуть на TTable и работать запросами. Преимуществ гораздо больше - все делаешь сам, все контролируешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2005, 02:01 |
|
||
|
Builder+ADO+Postgres
|
|||
|---|---|---|---|
|
#18+
MasterZivЭто -- классический дебилизм Дельфы (его TTable). Не умеет он понимать, что какие-то поля нельзя задавать при вставке, но значения их генерируются при этом. Это встречается на многих СУБД - Sybase, MSSQLServer. Рекомендую плюнуть на TTable и работать запросами. Преимуществ гораздо больше - все делаешь сам, все контролируешь. Не очень понятно какая тогда должна быть структура. Т.е. не использовать датасеты вообще? Или как? Если можно ссылку на какой-нибудь пример. А то пока нигде не попадалась действующая схема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2005, 11:03 |
|
||
|
Builder+ADO+Postgres
|
|||
|---|---|---|---|
|
#18+
Кстати, я еще нашел, что можно создать в датасете постоянные поля (persistent fields) и прописать ему свойство AutoIncrement. В инструкции есть целый раздел посвященный этому, но это тоже не помогло. Предполагаю, что опять сам что-то не так сделал. Есть идеи по этому поводу? Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2005, 13:25 |
|
||
|
Builder+ADO+Postgres
|
|||
|---|---|---|---|
|
#18+
DenissioНе очень понятно какая тогда должна быть структура. Т.е. не использовать датасеты вообще? Или как? Если можно ссылку на какой-нибудь пример. А то пока нигде не попадалась действующая схема. Да, не использовать датасеты вообще. Посылаешь запрос через ADO, получаешь ADO-resultset и функциями самого ADO работаешь с каждой ячейкой резалт-сета. Надо - раскидываешь данные из ADO-resultset вручную по ячейкам экранной таблицы, надо обновить - вручную же читаешь данные из ячеек экранной таблицы и формируешь INSERT/UPDATE запросы которые и кидаешь в базу. Теоретически VCL это все уже само делать умеет, но к сожалению не достаточно хорошо.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2005, 19:13 |
|
||
|
Builder+ADO+Postgres
|
|||
|---|---|---|---|
|
#18+
White OwlТеоретически VCL это все уже само делать умеет, но к сожалению не достаточно хорошо.... Простите, а чем не устраивает конкрентно ? Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2005, 06:07 |
|
||
|
Builder+ADO+Postgres
|
|||
|---|---|---|---|
|
#18+
Карабас Барабас White OwlТеоретически VCL это все уже само делать умеет, но к сожалению не достаточно хорошо.... Простите, а чем не устраивает конкрентно ? Ну в частности уже описаной в начале топика проблемой с чтением автозаполняемых полей. Но главная проблема в излишне запутаной и нестабильной работой c master-detail таблицами. А если количество detail-таблиц больше одной - вообще вешалка наступает. Поэтому лично я всегда предпочитаю самостоятельно выделять память, и самостоятельно заполнять ее из резалт-сетов. На долю VCL и/или других GUI библиотек я оставляю только отображение и редактирование данных из моих собственных массивов. Потом самостоятельно формирую INSERT/UPDATE/DELETE команды. Этот подход меня ни разу не подводил :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2005, 18:07 |
|
||
|
Builder+ADO+Postgres
|
|||
|---|---|---|---|
|
#18+
White Owl Понятно, т.е. в принципе претензии только к АДО-компонентам, а не к VCL в целом. Я IBX пользую, там с этим все нормально. Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 05:58 |
|
||
|
Builder+ADO+Postgres
|
|||
|---|---|---|---|
|
#18+
Постепенно удалось разобраться почти со всеми проблемами, с которыми столкнулся. И тут вылезла классическая ошибка: "BOF или EOF имеет значение True, либо текущая запись удалена". Происходит она при удалении последней записи из датасета, после вызова ApplyApdates. Поискал на форумах - народ пишет о разных случаях возникновения такой ошибки, но только не о таком как у меня. Предлагалось скачать апдейты, в т.ч. и для Дельфи. Все скачал, установил - бестолку. Главное не удается отловить момент когда эта ошибка происходит. Может кто знает? Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 18:47 |
|
||
|
Builder+ADO+Postgres
|
|||
|---|---|---|---|
|
#18+
а у меня возникла проблема при работе с TADOQuery нужно было выполнить команды вставки и удаления SQL при этом я сначала пользовался методом Open() для выполнения запроса на что получил исключение Edatabaseerror посмотрел в литературе что надо использовать ExecSQL(); но требуется чтобы запрос был выполнен вне зависимости от того SELECT или INSERT... написал примерно следующее: try {TQuery->Clear(); TQuery->Add(SQLText); TQuery->Open(); } catch(EDatabaseError&) {TQuery->ExecSQL(); } но после ентого стал получать сообщение о том что запись уже вставлена.....получается исключение есть ...и запись вставлена методом Open()..что это такое я не понял.....а тем более как с ентим бороться... если можете помогите пожалуйста.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2005, 01:42 |
|
||
|
Builder+ADO+Postgres
|
|||
|---|---|---|---|
|
#18+
Botik84а у меня возникла проблема при работе с TADOQuery нужно было выполнить команды вставки и удаления SQL при этом я сначала пользовался методом Open() для выполнения запроса на что получил исключение Edatabaseerror посмотрел в литературе что надо использовать ExecSQL(); Вообще не понятно в чем проблема. В инструкции сказано: использовать Open() для запросов, возвращающих данные (SELECT), а ExecSQL() для не возвращающих (INSERT, DELETE и т.п.) Вот: Документация BCBCall ExecSQL to execute the SQL statement currently assigned to the SQL property. Use ExecSQL to execute queries that do not return a cursor to data (such as INSERT, UPDATE, DELETE, and CREATE TABLE). ExecSQL returns an integer value reflecting the number of rows affected by the executed SQL statement. Note: For SELECT statements, call Open instead of ExecSQL or set the Active property to true. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2005, 03:03 |
|
||
|
Builder+ADO+Postgres
|
|||
|---|---|---|---|
|
#18+
Я создаю приложение для MSSQL , проблема в том что метод Open(); как это ни удивительно вставляет запись....при использовании INSERT. Соответственно приведённый выше код дважды пытается вставить одну и ту же запись в БД. От этого возникает ошибка....мой вопрос в том как можно сделать чтобы выполнялся любой запрос к базе не взирая INSERT это или SELECT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2005, 23:37 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=394&tid=2032854]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 257ms |
| total: | 384ms |

| 0 / 0 |
