Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.05;
Скачать: CL | DM;

Вниз

TQuery+order by   Найти похожие ветки 

 
VitalikS   (2006-01-14 09:34) [0]

Выполняю в запросе SQL ...order by name и после не могу добавить в таблицу никаких данных. Таблица становится недоступной для записи. Что можно сделать с этим или как другим образом упорядочить записи???

Технология доступа: BDE


 
Desdechado ©   (2006-01-14 16:18) [1]

читаем про CachedUpdates, TUpdateSQL


 
Anatoly Podgoretsky ©   (2006-01-14 16:42) [2]

VitalikS   (14.01.06 09:34)  
Индексы сделай для этих полей и RequestLive установи.
Или кешированые изменения.


 
Desdechado ©   (2006-01-14 19:41) [3]

установка RequestLive=True НЕ гарантирует, что датасет таки будет Live


 
VitalikS   (2006-01-15 03:00) [4]

Всё установленно, RequestLive установлен в true, индексы назначенны, но записи всё-равно не упорядоченны.


 
Desdechado ©   (2006-01-15 13:35) [5]

я не понял, то у тебя писать в таблицу нельзя, то записи не упорядочены
ты определись как-нибудь
и справку по [1] почитай ВНИМАТЕЛЬНО, без этого никто с ложки кормить тебя не будет


 
VitalikS   (2006-01-15 13:37) [6]

Установил компонент TUpdateSQL всё связал как надо, CachedUpdates установил в True, всё заработало, но теперь когда я добавляю новую запись счетчик в таблице перестает так сказать считать поле остается пустым. Что можно с этим сделать????


 
VitalikS   (2006-01-15 14:05) [7]


> я не понял, то у тебя писать в таблицу нельзя, то записи
> не упорядочены
> ты определись как-нибудь
> и справку по [1] почитай ВНИМАТЕЛЬНО, без этого никто с
> ложки кормить тебя не будет

Мне нужно чтобы записи были упорядоченны и чтобы я мог с таблицей нормально работать!


 
Desdechado ©   (2006-01-15 14:14) [8]

> счетчик в таблице перестает считать поле остается пустым
без знаков препинания смысл теряется
и что за счетчик в таблице? что пустое? в каком случае?


 
VitalikS   (2006-01-15 14:42) [9]


> без знаков препинания смысл теряется
> и что за счетчик в таблице? что пустое? в каком случае?

Вроде всё понятно написал, счетчик это тип поля - автоинкримент.
Вставляю запись в таблицу (Insert) все поля заполняю, сохраняю сделанные изменения (Post), а поле запись в которое должен делать счетчик, остается пустым.


 
Desdechado ©   (2006-01-15 15:08) [10]

невнимательно ты читал про CachedUpdates
пока ApplyUpdates не сделаешь, на сервер ничего не отправится, соответственно, никакой счетчик не увеличится
почитай статьи по поводу работы в технологии Client-Server
ибо похоже, что ты работаешь навигационными способами с целыми таблицами, а стоило бы - с выборками по условию (а это уже другой уровень)


 
VitalikS   (2006-01-15 15:25) [11]


> работаешь навигационными способами с целыми таблицами, а
> стоило бы - с выборками по условию (а это уже другой уровень)

У меня программа построенна как раз с выборками по условию (все таблицы на запросах SQL), частично это видно из моего первого вопроса


 
VitalikS   (2006-01-16 02:56) [12]


> невнимательно ты читал про CachedUpdates
> пока ApplyUpdates не сделаешь, на сервер ничего не отправится,
>  соответственно, никакой счетчик не увеличится

Делаю ApplyUpdates и вылетает ошибка что поле Key (то самое в котором счетчик и которое является ключом) пустое, а так как поле ключевое оно не может быть пустым.


 
Desdechado ©   (2006-01-16 11:18) [13]

1. можешь его заполнить "мусором", который все равно будет заменен сервером
2. можешь сбросить признак ключа и обязательности у этого TField, тогда не будет ругаться


 
msguns ©   (2006-01-16 13:17) [14]

Работа с парадоксом вообще чревата потерями данных, а через кэширование - тем более.
Выход один - отказ от редактирования в отображающем датасете. Интерфейс реализовать через модальную форму или эмулирование редактирования "в гриде" посредством ловко подставляемой панели с эдитами "как в строке грида".


 
evvcom ©   (2006-01-16 13:39) [15]


> и вылетает ошибка

Что прям так и пишет: "что поле Key (то самое в котором счетчик и которое является ключом) пустое, а так как поле ключевое оно не может быть пустым."? Я вообще-то встречал только англоязычные компоненты. А твой трактат оригинального текста, я думаю, никого здесь не волнует. Аглицкий мы тоже понимам...


 
VitalikS   (2006-01-16 14:37) [16]


> Что прям так и пишет: "что поле Key (то самое в котором
> счетчик и которое является ключом) пустое, а так как поле
> ключевое оно не может быть пустым."? Я вообще-то встречал
> только англоязычные компоненты. А твой трактат оригинального
> текста, я думаю, никого здесь не волнует. Аглицкий мы тоже
> понимам...

Лучше чего-нибудь толковое написал бы!!!

Desdechado © эту проблему уже удалось решить и как раз вторым способом, но я только галочку снял  на обязательность поля и всё стало работать нормально.
Спасибо всем кто помогал решить данную проблему


> эмулирование редактирования "в гриде" посредством ловко
> подставляемой панели с эдитами "как в строке грида".

К сожалению я не знаю как это сделать, а точнее не понимаю, что всё это означает и как это расшифровать....


 
evvcom ©   (2006-01-16 14:53) [17]


> Лучше чего-нибудь толковое написал бы!!!

А зачем, если все толковое уже написали? А мой пост преследовал только одну цель. Коли просишь помощи здесь, не надо интерпретировать ошибку по-своему, она (интерпретация) может быть ошибочной. Дай текст ошибки в оригинальном ее написании.


 
msguns ©   (2006-01-16 15:14) [18]

>VitalikS   (16.01.06 14:37) [16]
>К сожалению я не знаю как это сделать, а точнее не понимаю, что всё это означает и как это расшифровать....

Когда используются компоненты, позволяющие непосредственно редактировать таблицу(ы) БД (TXXXTable,TXXXQuery+TUpdateXXX,TXXXDataSet), управлять синхронностью "клиентских" и "серверных" изменений достаточно сложно, а иногда невозможно. Как следствие - "запаздывание" изменений непосредственно в БД и "непрозрачность" их для других пользователей БД.
Кроме того, существенно усложняется логика реализации многоступенчатых изменений в БД, не поддерживающих транзакции (пример -тот же парадокс), т.к. приходится приспосабливать собственный алгоритм к алгоритму, заложенному разработчиками компонент.

Для отделения чтения и изменения данных используют доступ, основанный на разных компонентах. Например, читаем TQuery, изменяем другим TQuery с последующей перечиткой НД в первом. При такой технологии возможно ЛЮБОЕ отображение ЛЮБЫХ частей БД, даже из нескольких таблиц. Однако непосредственно в отображающем гриде данные изменять нельзя. Изменение выполняется через модальную форму с не DB-aware контролами посредством выполнения отдельного запроса (TQuery) и последующей перечиткой отображаемого НД. При таком подходе можно полностью контролировать процесс передачи изменений на сервер, управлять их последовательностью и целостностью. Т.е. фактически "имитировать" транзакции в не SQL-серверных БД.

Можно для удобства пользователя, привыкшего к "эксельному" механизму правок прямо в решетке, сообразить такой же интерфейс. Однако это уже потребует некоторого гемора с кодом, т.к. придется "помучится" с правильной отрисовкой панели, визуально вставляемой на место текущей строки грида и соответствующими событиями датасета, грида и панели чтобы
внешне все выглядело "натурально"


 
Desdechado ©   (2006-01-16 16:31) [19]

> я только галочку снял  на обязательность поля
надеюсь, ты ее снял у TField-компонента в дельфи, а не у поля в таблице БД?


 
VitalikS   (2006-01-17 03:35) [20]


> надеюсь, ты ее снял у TField-компонента в дельфи, а не у
> поля в таблице БД?

Если я её снимаю у TField-компонента то вылетает другая ошибка, а так если в самой таблице, то всё работает нормально. В принципе я не знаю нужна ли эта галочка в таблице, поле ключевое и я не думаю что это чем-то ему помешает.

> не DB-aware контролами посредством выполнения отдельного
> запроса (TQuery)

То есть все записи должны добавляться командой языка SQL, а не командой Insert (я сначала делаю команду Insert, а затем присваиваю каждому полю необходимое значение из Edit"а с помощью FieldValues[""]:="" )


 
evvcom ©   (2006-01-17 08:38) [21]


> добавляться командой языка SQL, а не командой Insert

:)
Insert - есть как метод у любого TDataSet, так и оператор языка SQL (этим и объясняется мой смайлик чуть выше). INSERT INTO MyTable Values(...) прописываешь в TUpdateSQL (так же как и UPDATE и DELETE, если нужно), а компонентами делаешь те же самые DataSet.Insert / Edit / Delete, FieldValues["..."]:=Value и Post. Или используешь DBEdit-компоненты.


 
msguns ©   (2006-01-17 09:16) [22]

>VitalikS   (17.01.06 03:35) [20]
>То есть все записи должны добавляться командой языка SQL

Да-с.. ;((
Если надо по быстрячку забацать "шоб дым шел" и забыть БД как кошмарный сон, то не читай мои посты.
А если есть желание действительно научиться программировать БД, почитай все же литературу или для начала хэлпы по компонентам.


 
KSK   (2006-01-17 11:04) [23]


> msguns


> Однако непосредственно в отображающем гриде данные изменять
> нельзя. Изменение выполняется через модальную форму с не
> DB-aware контролами посредством выполнения отдельного запроса
> (TQuery)  
и последующей перечиткой отображаемого НД. При
> таком подходе можно полностью контролировать процесс передачи
> изменений на сервер, управлять их последовательностью и
> целостностью. Т.е. фактически "имитировать" транзакции в
> не SQL-серверных БД


Можно вопрос, а для SQL-серверных БД - через модальную форму с  DB-aware контролами без  выполнения отдельного запроса, используя ADODataset.UpdateBatch() ???
Если делать отдельными запросами - то постоянно надо основной Dataset обновлять, что нагружает сеть.
Я делал так и с DBF файлами через АDO - проблемы возникают только в создании инкремента - без уникального ключа ADO обычно отказывается изменять данные.


 
Desdechado ©   (2006-01-17 11:10) [24]

> Если я её снимаю у TField-компонента то вылетает другая ошибка,
Если тебе все равно, то можешь не писать сюда ее текст. Мне до фени...
Маскировать ошибки вместо лечения - за такое у нас убивают.

> а так если в самой таблице, то всё работает нормально.
На первый взгляд.

> В принципе я не знаю нужна ли эта галочка в таблице
Так выясни. CONSTRAINTS - это одна из основ СУБД.

> поле ключевое и я не думаю что это чем-то ему помешает
Думать можешь, как хочешь. Но NULL-PK в нормальных СУБД быть не может. И логика дальнейшей работы мне не понятна: нафига ключ, если ты его можешь не заполнять?


 
msguns ©   (2006-01-17 11:40) [25]

>KSK   (17.01.06 11:04) [23]

Технология интерфейса "Пользователь-БД" не зависит от того, какая БД. Т.е. можно сделать "гридное" редактирование для любой базы. А можно "пакетное" через "ручное" накопление обновлений в оперативных буферах, например TEdit.Text (например, расположенных на форме, открываемой модально), динамической компоновкой и выполнением запроса.
Однако управление реальными изменениями в БД при первой технологии затруднено из-за "вшитости" в компоненты доступа алгоритмов подтверждений-откатов изменений и "непрозрачного" контроля транзакций. В SQL-серверах эту "кривизну" можно вполне исправить, перенеся алгоритмику сложных изменений на сервер (включить ее в бизнес-логику). В локалках это невозможно. Именно поэтому я и рекомендовал для последних "пакетную" методику коррекции таблиц БД, в которой управление контекстом изменений возможно в полном объеме "с клиента".


 
Sergey13 ©   (2006-01-17 11:55) [26]

2[25] msguns ©   (17.01.06 11:40)
> в которой управление контекстом изменений возможно в полном объеме "с клиента".
Ну, про "полный объем" ты явно загнул, ИМХО. Я бы предложил "управляемость значительно выше". 8-)


 
msguns ©   (2006-01-17 12:01) [27]

>Sergey13 ©   (17.01.06 11:55) [26]
>Ну, про "полный объем" ты явно загнул, ИМХО

Ну уговорил, уговорил, праатииивный:

..возможно в более полном объеме "с клиента".


 
KSK   (2006-01-17 12:20) [28]


> msguns

И всё же... при всём уважении к Вам я так и не получил ответ на свой вопрос, а хотелось бы... не ради любопытсва. Когда пишеш програмку пока база маленькая проблем нету..... а как она себя поведёт когда пойдут Гбайты, сотни Гиг...??? А когда начнут требовать цыфири, а оно никак.....

Так всё же, что выбрать для базы MS SQL
1) Изменение выполняется через модальную форму с не
 DB-aware контролами посредством выполнения отдельного запроса
 и последующей перечиткой отображаемого НД
2)  через модальную форму с  DB-aware контролами без  выполнения отдельного запроса, используя ADODataset.UpdateBatch()

 Я выбрал второе, просьба отговорить!!!!

 (если не ошибаюсь Н.Фоменко - "Женюсь, просьба отговорить за вознаграждение")

msguns "Ще не вмерла..."


 
Sergey13 ©   (2006-01-17 12:41) [29]

2[28] KSK   (17.01.06 12:20)
>  Я выбрал второе, просьба отговорить!!!!
А зачем отговаривать? Нормальный подход. Я тоже чаще так делаю. Другое дело, что для разных случаев нужны разные подходы. Например для ввода/редактирования многотабличного документа со сложными связями/проверками все таки лучше, ИМХО, подходит первый вариант.
Мой критерий примерно таков: если реально нужна бизнес-транзакция - первый вариант, если пофиг то пофиг как.


 
KSK   (2006-01-17 13:03) [30]


> Sergey13

Спасибо, успокоил, не всё в этой жизни я делал не так))))
Согласен на все 100 - если пофиг то пофиг как.
Я тоже второй вариант в большинстве использую для ввода/редактирования справочников или таблиц с малым количеством связей, одним словом отдаю предпочтение второму варианту.


 
msguns ©   (2006-01-17 13:11) [31]

>Sergey13 ©, KSK

Правильною дорогой идете, товарищи !


 
VitalikS   (2006-01-17 14:50) [32]


> Да-с.. ;((
> Если надо по быстрячку забацать "шоб дым шел" и забыть БД
> как кошмарный сон, то не читай мои посты.
> А если есть желание действительно научиться программировать
> БД, почитай все же литературу или для начала хэлпы по компонентам.
>

Просто я не очень знаю все  эти названия хотя пользуюсь этими средствами постоянно, например когда сначала прочитал твое высказывание про модальные формы, db-aware компоненты, не сразу понял, хотя использую так называемые вами модальные формы во всех своих приложениях (причем не важно с базами или нет), db-aware вообще стараюсь как можно реже использовать. А насчет отдельных запросов, спасибо именно так теперь и делаю!!!
> Если тебе все равно, то можешь не писать сюда ее текст.
> Мне до фени...
> Маскировать ошибки вместо лечения - за такое у нас убивают.
>

Если для поля required=false, а всамой таблице поле обязательное то вылетает ошибка "Field value required"


 
Sergey13 ©   (2006-01-17 14:53) [33]

2[32] VitalikS   (17.01.06 14:50)
> db-aware вообще стараюсь как можно реже использовать.
При работе с БД это странный (как минимум) подход.


 
Desdechado ©   (2006-01-17 16:03) [34]


> Если для поля required=false, а всамой таблице поле обязательное
> то вылетает ошибка "Field value required"

см. [13] п.1


 
VitalikS   (2006-01-18 05:20) [35]


> см. [13] п.1

Посмотрел, сделал. Всё равно ошибка "Field value required".


 
evvcom ©   (2006-01-18 09:08) [36]


> Посмотрел, сделал.

Значит что-то не то сделал. И вообще у тебя в программе ошибка. В 17-й строке.


 
VitalikS   (2006-01-18 12:07) [37]


> И вообще у тебя в программе ошибка. В 17-й строке.

Умно!!!!!
Лучше бы вообще ничего не писал, чем всякую хрень.


 
Sergey13 ©   (2006-01-18 12:20) [38]

2[37] VitalikS   (18.01.06 12:07)
ИМХО, он только с номером строки мог ошибиться. 8-)



Страницы: 1 вся ветка

Текущий архив: 2006.02.05;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.027 c
2-1137109613
Люди
2006-01-13 02:46
2006.02.05
Как узнать существует ли файл на сайте


2-1137410005
Tigraman
2006-01-16 14:13
2006.02.05
Memo и checkbox


2-1137407275
-matrix-
2006-01-16 13:27
2006.02.05
Парочка глупых вопросов


10-1107878782
arick
2005-02-08 19:06
2006.02.05
Flash ActiveX компонент


4-1132737561
Irmantukas
2005-11-23 12:19
2006.02.05
Как запретить какую то комбинацию клавиш