Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.013 c
15-1137401942
Rentgen
2006-01-16 11:59
2006.02.05
поле с прокруткой как в MoveMaker ???


15-1137482594
Mike48
2006-01-17 10:23
2006.02.05
посоветуйте книжку плиз...


15-1137314002
Kerk
2006-01-15 11:33
2006.02.05
Домены за $2.99 в год


15-1136862432
vidiv
2006-01-10 06:07
2006.02.05
getdc(0);


4-1132644748
ZSOmega
2005-11-22 10:32
2006.02.05
помогите с NetUserSetGroups





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский