![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TQuery+order by [D7, Paradox]
VitalikS © (2006-01-14 09:34:00)Выполняю в запросе SQL ...order by name и после не могу добавить в таблицу никаких данных. Таблица становится недоступной для записи. Что можно сделать с этим или как другим образом упорядочить записи???
Технология доступа: BDE
Sergey13 (2006-01-18 12:20:00) [1]2[37] VitalikS (18.01.06 12:07)
ИМХО, он только с номером строки мог ошибиться. 8-)
VitalikS (2006-01-18 12:07:00) [2]
> И вообще у тебя в программе ошибка. В 17-й строке.
Умно!!!!!
Лучше бы вообще ничего не писал, чем всякую хрень.
evvcom (2006-01-18 09:08:00) [3]
> Посмотрел, сделал.
Значит что-то не то сделал. И вообще у тебя в программе ошибка. В 17-й строке.
VitalikS (2006-01-18 05:20:00) [4]
> см. [13] п.1
Посмотрел, сделал. Всё равно ошибка "Field value required".
Desdechado (2006-01-17 16:03:00) [5]
> Если для поля required=false, а всамой таблице поле обязательное
> то вылетает ошибка "Field value required"
см. [13] п.1
Sergey13 (2006-01-17 14:53:00) [6]2[32] VitalikS (17.01.06 14:50)
> db-aware вообще стараюсь как можно реже использовать.
При работе с БД это странный (как минимум) подход.
VitalikS (2006-01-17 14:50:00) [7]
> Да-с.. ;((
> Если надо по быстрячку забацать "шоб дым шел" и забыть БД
> как кошмарный сон, то не читай мои посты.
> А если есть желание действительно научиться программировать
> БД, почитай все же литературу или для начала хэлпы по компонентам.
>
Просто я не очень знаю все эти названия хотя пользуюсь этими средствами постоянно, например когда сначала прочитал твое высказывание про модальные формы, db-aware компоненты, не сразу понял, хотя использую так называемые вами модальные формы во всех своих приложениях (причем не важно с базами или нет), db-aware вообще стараюсь как можно реже использовать. А насчет отдельных запросов, спасибо именно так теперь и делаю!!!
> Если тебе все равно, то можешь не писать сюда ее текст.
> Мне до фени...
> Маскировать ошибки вместо лечения - за такое у нас убивают.
>
Если для поля required=false, а всамой таблице поле обязательное то вылетает ошибка "Field value required"
msguns (2006-01-17 13:11:00) [8]>Sergey13 ©, KSK
Правильною дорогой идете, товарищи !
KSK (2006-01-17 13:03:00) [9]
> Sergey13
Спасибо, успокоил, не всё в этой жизни я делал не так))))
Согласен на все 100 - если пофиг то пофиг как.
Я тоже второй вариант в большинстве использую для ввода/редактирования справочников или таблиц с малым количеством связей, одним словом отдаю предпочтение второму варианту.
Sergey13 (2006-01-17 12:41:00) [10]2[28] KSK (17.01.06 12:20)
> Я выбрал второе, просьба отговорить!!!!
А зачем отговаривать? Нормальный подход. Я тоже чаще так делаю. Другое дело, что для разных случаев нужны разные подходы. Например для ввода/редактирования многотабличного документа со сложными связями/проверками все таки лучше, ИМХО, подходит первый вариант.
Мой критерий примерно таков: если реально нужна бизнес-транзакция - первый вариант, если пофиг то пофиг как.
KSK (2006-01-17 12:20:00) [11]
> msguns
И всё же... при всём уважении к Вам я так и не получил ответ на свой вопрос, а хотелось бы... не ради любопытсва. Когда пишеш програмку пока база маленькая проблем нету..... а как она себя поведёт когда пойдут Гбайты, сотни Гиг...??? А когда начнут требовать цыфири, а оно никак.....
Так всё же, что выбрать для базы MS SQL
1) Изменение выполняется через модальную форму с не
DB-aware контролами посредством выполнения отдельного запроса
и последующей перечиткой отображаемого НД
2) через модальную форму с DB-aware контролами без выполнения отдельного запроса, используя ADODataset.UpdateBatch()
Я выбрал второе, просьба отговорить!!!!
(если не ошибаюсь Н.Фоменко - "Женюсь, просьба отговорить за вознаграждение")
msguns"Ще не вмерла..."
msguns (2006-01-17 12:01:00) [12]>Sergey13 © (17.01.06 11:55) [26]
>Ну, про "полный объем" ты явно загнул, ИМХО
Ну уговорил, уговорил, праатииивный:
..возможно в болееполном объеме "с клиента".
Sergey13 (2006-01-17 11:55:00) [13]2[25] msguns © (17.01.06 11:40)
> в которой управление контекстом изменений возможно в полном объеме "с клиента".
Ну, про "полный объем" ты явно загнул, ИМХО. Я бы предложил "управляемость значительно выше". 8-)
msguns (2006-01-17 11:40:00) [14]>KSK (17.01.06 11:04) [23]
Технология интерфейса "Пользователь-БД" не зависитот того, какая БД. Т.е. можно сделать "гридное" редактирование для любойбазы. А можно "пакетное" через "ручное" накопление обновлений в оперативных буферах, например TEdit.Text (например, расположенных на форме, открываемой модально), динамической компоновкой и выполнением запроса.
Однако управление реальными изменениями в БД при первой технологии затруднено из-за "вшитости" в компоненты доступа алгоритмов подтверждений-откатов изменений и "непрозрачного" контроля транзакций. В SQL-серверах эту "кривизну" можно вполне исправить, перенеся алгоритмику сложных изменений на сервер (включить ее в бизнес-логику). В локалках это невозможно. Именно поэтому я и рекомендовал для последних "пакетную" методику коррекции таблиц БД, в которой управление контекстом изменений возможно в полном объеме "с клиента".
Desdechado (2006-01-17 11:10:00) [15]> Если я её снимаю у TField-компонента то вылетает другая ошибка,
Если тебе все равно, то можешь не писать сюда ее текст. Мне до фени...
Маскировать ошибки вместо лечения - за такое у нас убивают.
> а так если в самой таблице, то всё работает нормально.
На первый взгляд.
> В принципе я не знаю нужна ли эта галочка в таблице
Так выясни. CONSTRAINTS - это одна из основ СУБД.
> поле ключевое и я не думаю что это чем-то ему помешает
Думать можешь, как хочешь. Но NULL-PK в нормальных СУБД быть не может. И логика дальнейшей работы мне не понятна: нафига ключ, если ты его можешь не заполнять?
KSK (2006-01-17 11:04:00) [16]
> msguns
> Однако непосредственно в отображающем гриде данные изменять
> нельзя. Изменение выполняется через модальную форму с не
> DB-aware контролами посредством выполнения отдельного запроса
> (TQuery) и последующей перечиткой отображаемого НД. При
> таком подходе можно полностью контролировать процесс передачи
> изменений на сервер, управлять их последовательностью и
> целостностью. Т.е. фактически "имитировать" транзакции в
> не SQL-серверных БД
Можно вопрос, а для SQL-серверных БД - через модальную форму с DB-aware контролами без выполнения отдельного запроса, используя ADODataset.UpdateBatch() ???
Если делать отдельными запросами - то постоянно надо основной Dataset обновлять, что нагружает сеть.
Я делал так и с DBF файлами через АDO - проблемы возникают только в создании инкремента - без уникального ключа ADO обычно отказывается изменять данные.
msguns (2006-01-17 09:16:00) [17]>VitalikS (17.01.06 03:35) [20]
>То есть все записи должны добавляться командой языка SQL
Да-с.. ;((
Если надо по быстрячку забацать "шоб дым шел" и забыть БД как кошмарный сон, то не читай мои посты.
А если есть желание действительно научиться программировать БД, почитай все же литературу или для начала хэлпы по компонентам.
evvcom (2006-01-17 08:38:00) [18]
> добавляться командой языка SQL, а не командой Insert
:)
Insert - есть как метод у любого TDataSet, так и оператор языка SQL (этим и объясняется мой смайлик чуть выше). INSERT INTO MyTable Values(...) прописываешь в TUpdateSQL (так же как и UPDATE и DELETE, если нужно), а компонентами делаешь те же самые DataSet.Insert / Edit / Delete, FieldValues['...']:=Value и Post. Или используешь DBEdit-компоненты.
VitalikS (2006-01-17 03:35:00) [19]
> надеюсь, ты ее снял у TField-компонента в дельфи, а не у
> поля в таблице БД?
Если я её снимаю у TField-компонента то вылетает другая ошибка, а так если в самой таблице, то всё работает нормально. В принципе я не знаю нужна ли эта галочка в таблице, поле ключевое и я не думаю что это чем-то ему помешает.
> не DB-aware контролами посредством выполнения отдельного
> запроса (TQuery)
То есть все записи должны добавляться командой языка SQL, а не командой Insert (я сначала делаю команду Insert, а затем присваиваю каждому полю необходимое значение из Edit'а с помощью FieldValues['']:='' )
Desdechado (2006-01-16 16:31:00) [20]> я только галочку снял на обязательность поля
надеюсь, ты ее снял у TField-компонента в дельфи, а не у поля в таблице БД?