Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

Здесь есть возможность читать онлайн «Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Советы по Delphi. Версия 1.4.3 от 1.1.2001: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Советы по Delphi. Версия 1.4.3 от 1.1.2001»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

…начиная с 1001. Смотрите другие файлы…

Советы по Delphi. Версия 1.4.3 от 1.1.2001 — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Советы по Delphi. Версия 1.4.3 от 1.1.2001», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Перестановкой SELECT a, b, c, q… все исправилось. Я решил теперь использовать в таких (live) запросах только SELECT *.

Как поймать свой RAISEERROR в Delphi?

Nomadicотвечает:

procedureTFDMUtils.GeneralError( DataSet: TDataSet; E: EDatabaseError; varAction: TDataAction);

var

i: Word;

ExtInfo : String;

begin

ExtInfo := '';

if(E isEDBEngineError) then begin

if(EDBEngineError(E).Errors[0].NativeError = 0) then begin// Local Error

ifEDBEngineError(E).Errors[0].Errorcode = 9732 then

ExtInfo := DataSet.FieldByName(trim(copy(E.Message, 29, 20))).DisplayLabel;

.......................................

end

else begin// Remote SQL Server error

ExtInfo := ExtractFieldLabels(DataSet, E.Message);

caseEDBEngineError( E ).Errors[0].NativeError of

233, 515:

Alert('Ошибка', 'Hе все поля заполнены ! ' + ExtInfo);

547:

if(StrPos(PChar(E.Message), PChar('DELETE')) <> nil) then

Alert('Ошибка пpи удалении', 'Имеются подчиненные записи, удаление (изменение) невозможно! ' + ExtInfo)

else if(StrPos(PChar(E.Message), PChar('INSERT')) <> nil) then

Alert('Ошибка пpи вставке', 'Отсутствует запись в МАСТЕР-таблице!' + ExtInfo)

else if(StrPos(PChar(E.Message), PChar('UPDATE')) <> nil) then

Alert('Ошибка пpи обновлении', 'Отсутствует запись в МАСТЕР-таблице! ' + ExtInfo);

2601:

Alert('Ошибка', 'Такая запись уже есть!');

else

Alert('Ошибка', 'Hеизвестная ошибка, код – ' + inttostr(EDBEngineError(E).Errors[0].NativeError) + ExtInfo);

end;

end;

end;

end;

Этот код был заточен под MSSQL, но не нужно пытаться его использовать, а лучше по этому пpимеpу написать свою процедуру.

Как добиться верной работы фильтра на запросах и на неиндексированных таблицах?

Nomadicотвечает:

(Т.е. при работе программы наблюдалась следующая картина: в результате очередной фильтрации оставалось видно 4 записи из восьми. Добавляем букву к фильтру, остается, допустим, две. Убираем букву, которую только что добавили, в гриде все равно видно только две записи)

Эта проблема была в Delphi 3.0 только на TQuery, а в Delphi 3.01 появилась и в TTable.

Лечится так (простой пример):

procedureTMainForm.Edit1Change(Sender: TObject);

begin

iflength(Edit1.Text) > 0 then begin

Table1.Filtered := TRUE;

UpdateFilter(Table1);

end

elseTable1.Filtered := FALSE;

end;

procedureTMainForm.UpdateFilter(DataSet: TDataSet);

varFR: TFilterRecordEvent;

begin

withDataSet do begin

FR := OnFilterRecord;

ifAssigned(FR) andActive thenbegin

DisableControls;

try

OnFilterRecord := nil;

OnFilterRecord := FR;

finally

EnableControls;

end;

end;

end;

end;

Как бы мне соорудить в SP исключение, чтобы его увидел Delphi-клиент?

Nomadicотвечает:

sqlstate='99999'не подходит, так как хочется на клиенте видеть код исключения.

Используй RAISERRORс кодом > 20000. Если еще при этом научишься без потерь передавать на Delphi-клиента русские ругательства, то скажи мне как ты этого добился :).

Когда я применяю ApplyUpdates на ClientDataSet, на серверной стороне не срабатывает событие OnNewRecord для оригинального набора данных. Как это исправить?

Nomadicотвечает:

Никак. Эти обновления идут прямо через BDE, а не через компонент набора данных.

В Delphi 4.0 (C++Builder 4.0) ситуация радикально изменилась.

Во-первых, обычному провайдеру данных ( TProvider) можно указать, каким образом обновлять данные.

Во-вторых, новый тип провайдера ( TDataSetProvider) работает только через соответвующие методы TDataSet.

То есть – все события при данных условиях на сервере будут отрабатываться обычным образом.

Если же Вы пользуетесь более старой версией Delphi, то, как обычно, можно посоветовать использование хранимых процедур, в данном контексте это будут методы сервера приложений. К сожалению, совет неприемлем для транспорта Sockets.

SQL

Функции дат в SQL

Тема: Функции дат в SQL

Кто-нибудь знает как «вытащить» месяц или год из datetime-поля с помощью SQL? Я знаю, что QBE этого не может. SQL в состоянии это сделать?

Как насчет функции EXTRACT?

SELECT SALEDATE,

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Советы по Delphi. Версия 1.4.3 от 1.1.2001»

Представляем Вашему вниманию похожие книги на «Советы по Delphi. Версия 1.4.3 от 1.1.2001» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Советы по Delphi. Версия 1.4.3 от 1.1.2001»

Обсуждение, отзывы о книге «Советы по Delphi. Версия 1.4.3 от 1.1.2001» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x