powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Поле фиксированной длины?
15 сообщений из 15, страница 1 из 1
Поле фиксированной длины?
    #32346291
Dimedrol2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Работаю так:

AdoConnection
AdoDataSet
Provider
ClientDataSet

+

EhLib

DBEditEh
DBGridEh и т.д.

Косяк в чем:

На MSSQL 2000 есть таблица, там поле типа строка длиной там 25 символов.
Так вот, компоненты доступа к данным и отображают эти 25 символов, даже если в таблице записана строка длиной в 8 (там вылезают пробелы).

Че делать?
...
Рейтинг: 0 / 0
Поле фиксированной длины?
    #32346296
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поменять тип данных поля таблицы с char(25) на varchar(25) + обрезать правые пробелы с помошью RTRIM().
...
Рейтинг: 0 / 0
Поле фиксированной длины?
    #32346352
Redhat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть цикл, который перебирает весь датасет и обрезает пробелы?
А если там 25000 строк?
...
Рейтинг: 0 / 0
Поле фиксированной длины?
    #32346378
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что мешает в самом запросе так сделать ?
_____________
...
Рейтинг: 0 / 0
Поле фиксированной длины?
    #32346395
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причем тут цикл и датасеты?! Я правильно предположил, что поле в базе у вас char(25)? Меняйте тип поля на varchar(25), чтоб сиквел не дописывал пробелы в конец:

Код: plaintext
ALTER TABLE Table1 ALTER COLUMN ColumnOfChar25 varchar( 25 )


Затем отсеките имеющиеся уже пробелы:

Код: plaintext
1.
2.
3.
UPDATE
  Table1
SET
  ColumnOfChar25 = RTRIM(ColumnOfChar25)


С серверной частью все. Теперь в клиентской, если были созданы статические поля в FieldsEditor, то меняем у этого поля свойство FixedChar на False.
...
Рейтинг: 0 / 0
Поле фиксированной длины?
    #32347232
Redhat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
C этим разобрался - спасибо!

Но появился след вопрос:

Появляется ошибка: Приложение не может явнм образом закрыть объект Connection в середине транзакции. Это происходит при вызове удаленной процедуры. Как быть?
...
Рейтинг: 0 / 0
Поле фиксированной длины?
    #32347260
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЭто происходит при вызове удаленной процедуры. Как быть?

А кто открывает транзакцию? кусок кода можно увидеть?
...
Рейтинг: 0 / 0
Поле фиксированной длины?
    #32347312
Redhat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
procedure TFClients.providerBeforeUpdateRecord(Sender: TObject;
SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
UpdateKind: TUpdateKind; var Applied: Boolean);
begin
case UpdateKind of
ukModify:
begin
with dm do begin
sp_clients_update.Parameters.ParamByName('@bank').Value :=DeltaDS.FieldByName('Áàíê').NewValue;
sp_clients_update.Parameters.ParamByName('@naim').Value :=DeltaDS.FieldByName('Íàèìåíîâàíèå').NewValue;
sp_clients_update.Parameters.ParamByName('@adress').Value :=DeltaDS.FieldByName('Àäðåñ').NewValue;
sp_clients_update.Parameters.ParamByName('@tel').Value :=DeltaDS.FieldByName('Òåëåôîí').NewValue;
sp_clients_update.Parameters.ParamByName('@schet').Value:=DeltaDS.FieldByName('Ñ÷åò').NewValue;
sp_clients_update.Parameters.ParamByName('@OKPO').Value :=DeltaDS.FieldByName('ÎÊÏÎ').NewValue;
sp_clients_update.ExecProc;
end;
end;
ukDelete:
begin
with dm do begin
sp_clients_delete.Parameters.ParamByName('@bik').Value:=DeltaDS.FieldByName('ÁÈÊ').OldValue;;
sp_clients_delete.ExecProc;
end;
end;
ukInsert:
begin
with dm do begin
// sp_clients_insert.Parameters.ParamByName('@id').Value:='';
sp_clients_insert.Close;
sp_clients_insert.Parameters.ParamByName('@naim').Value :=DeltaDS.FieldByName('Íàèìåíîâàíèå').NewValue;
sp_clients_insert.Parameters.ParamByName('@adress').Value :=DeltaDS.FieldByName('Àäðåñ').NewValue;
sp_clients_insert.Parameters.ParamByName('@tel').Value :=DeltaDS.FieldByName('Òåëåôîí').NewValue;
sp_clients_insert.Parameters.ParamByName('@leader').Value :=DeltaDS.FieldByName('Ðóêîâîäèòåëü').NewValue;
sp_clients_insert.Parameters.ParamByName('@datareg').Value :=DeltaDS.FieldByName('Äàòà ðåãèñòðàöèè').NewValue;
sp_clients_insert.Parameters.ParamByName('@bank').Value :=DeltaDS.FieldByName('Áàíê').NewValue;
sp_clients_insert.Parameters.ParamByName('@schet').Value :=DeltaDS.FieldByName('Ñ÷åò').NewValue;
sp_clients_insert.Parameters.ParamByName('@okpo').Value :=DeltaDS.FieldByName('ÎÊÏÎ').NewValue;
sp_clients_insert.Parameters.ParamByName('@kpp').Value :=DeltaDS.FieldByName('ÊÏÏ').NewValue;
sp_clients_insert.ExecProc;
// sp_clients_insert.Close;
end;
end;
end;
Applied := True;
end;
...
Рейтинг: 0 / 0
Поле фиксированной длины?
    #32347314
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то я не вижу, где ты пытаешься закрыть Connection, а вот не нужные sp_clients_insert.Close есть. Обычно транзакцию начинают перед вызовом метода ApplayUpdates.
...
Рейтинг: 0 / 0
Поле фиксированной длины?
    #32347322
Redhat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так у меня ApplyUpdates получается генерирует событие для провайдера, обработчик которого и запускает процедуры
...
Рейтинг: 0 / 0
Поле фиксированной длины?
    #32347328
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну дык понятно. В какой момент то коннекшен закрывается? прям в обработчике BeforeUpdateRecord?!
...
Рейтинг: 0 / 0
Поле фиксированной длины?
    #32347411
Redhat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все! Я понял. Просто таблицы криво открывал...:)

Ну и наверно последний вопрос.

У меня после изменения в ClientDataSete не обновляются данные в контролах.

Я написал так:

procedure TFClients.cds_clientsAfterPost(DataSet: TDataSet);
begin
cds_clients.ApplyUpdates(-1);
cds_Clients.Close;
cds_Clients.Open;
end;

Но мне кажется, есть другой путь.
...
Рейтинг: 0 / 0
Поле фиксированной длины?
    #32347430
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про какие данные ты ведешь речь? Эти данные не пользователь в контролы вводит? Или они в базе генеряться? Если последнее, то без переоткрытия не обойтись.
...
Рейтинг: 0 / 0
Поле фиксированной длины?
    #32347860
Redhat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Данные, которые пользователь вводит в ClientDataSet, которые потом типа должны синхронизироваться с таблицами sql, но я этого не делаю и обращаюсь к серверу с помощью процедур. ClientDataSet мне нужен лишь для того, чтобы определять какое действие выполнил пользователь и в соответствии с этим вызывать процедуру. Так вот. Делаю ClientDataset1.Append, пользователь вводит данные, потом post. И ни хрена эти данные не отобращаются.
...
Рейтинг: 0 / 0
Поле фиксированной длины?
    #32347902
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторДанные, которые пользователь вводит в ClientDataSet,

Так у тебя через контролы другие какие то даные показываются, а не те какие редактирует пользователь?
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Поле фиксированной длины?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]