powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / проверить совместимость типов полей перед Insert
16 сообщений из 16, страница 1 из 1
проверить совместимость типов полей перед Insert
    #39709755
filll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Есть 2 таблицы (источник и приемник данных), открытые в своих датасетах. Название полей и их дельфовые типы из датасетов я получать умею :) Составляю запрос по переносу данных из первой во вторую таблицу. Как перед инсертом проверить, что в поле принимающей таблицы я буду писать совместимое по типу значение из исходной таблицы?
К примеру, что в интеджер нельзя писать флоат, в флоат нельзя писать стринг, в стринг можно писать и интеджер и флоат...
Мне в голову приходит только 1 более менее толковое решения: построить матрицу типов по вертикали и горизонтали, а на их пересечении признак совместимости (вертикального типа с горизонтальным).
Может у кого то есть какое то более правильное или уже готовое решение?
Заранее спасибо!
...
Рейтинг: 0 / 0
проверить совместимость типов полей перед Insert
    #39709763
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
filllК примеру, что в интеджер нельзя писать флоат, в флоат нельзя писать стринг, в стринг
можно писать и интеджер и флоат...

Какая странная у тебя таблица... Но это ладно, проверка - полбеды. Как ты само
преобразование-то типов будешь делать? Только не говори, что x.value = y.value, это было
бы уже совсем тупо.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
проверить совместимость типов полей перед Insert
    #39709765
filll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
мне только проверка нужна. если пользователь хочет из источника колонку №3 (стринг) запихнуть в колонку принимающей таблицы №2 (инт) то ругнуться и не выполнять инсерт.
...
Рейтинг: 0 / 0
проверить совместимость типов полей перед Insert
    #39709766
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
filllМожет у кого то есть какое то более правильное или уже готовое решение?

Лично я делаю так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
case TargetField.DataType of
ftInteger: begin
     case SourceField.DataType of
      ftInteger: TargetField.AsInteger := SourceField.AsInteger;
     else
       raise Exception.Create('Не поддерживаемое преобразование из %d в целое', 
SourceField.DataType);
     end;
   end
else
   raise Exception.CreateFmt('Не поддерживаемый тип целевого поля %d', TargetField.DataType);
end;


Многа букафф, зато абсолютная надёжность.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
проверить совместимость типов полей перед Insert
    #39709775
filll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
спасибо. не поспоришь. надежно.
Но как то долго тип с типом сравнивать. Если TargetField.DataType - стринг, который может принять практически все, и интеджер и дататайм и еще многие типы... то много кода получится.
Наверно нарисую я матрицу совместимости. А может для каждого известного типа список совместимых типов и буду счастлив...
...
Рейтинг: 0 / 0
проверить совместимость типов полей перед Insert
    #39709778
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
filllто много кода получится.

Во-первых, не так уж и много. Типов данных реально мало.
Во-вторых, ты всерьёз боишься стереть пальцы?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
проверить совместимость типов полей перед Insert
    #39709783
filll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
Не, не боюсь. Просто думал, что есть какое то изящное решение или кто-то добрый поделится уже готовой процедуркой, у которой на входе 2 типа, а на выходе Тру или Фолсе :)
...
Рейтинг: 0 / 0
проверить совместимость типов полей перед Insert
    #39709788
zinpub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что если StringList типа:

I=FC
F=C
.....


C - string
I - Integer
F - Float

а присваивать, через Variant уже...
...
Рейтинг: 0 / 0
проверить совместимость типов полей перед Insert
    #39709790
filll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zinpub
Спасибо. Именно в эту сторону я сейчас и смотрю.
...
Рейтинг: 0 / 0
проверить совместимость типов полей перед Insert
    #39709814
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Идиотский вопрос - а нафига ?
...
Рейтинг: 0 / 0
проверить совместимость типов полей перед Insert
    #39709850
filll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
schi
что нафига? проверять совместимость типов или смотреть в сторону стринглиста?
...
Рейтинг: 0 / 0
проверить совместимость типов полей перед Insert
    #39709868
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
const
  ConvertMatrix: array[TFieldType, TFieldType] of Boolean = (
     .......
  );

if not ConvertMatrix[DataSet1.Fields[i].FieldType, DataSet2.Fields[j].FieldType]) then
  raise Exception.Create('.........')



А вообще я не понимаю, почему нельзя преобразовать '5' в 5, а 7.1 в 7
...
Рейтинг: 0 / 0
проверить совместимость типов полей перед Insert
    #39709876
zinpub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,

Ну array или valuelist - эт непринципиально, а 7.1 в 7 - может быть неверно для логики
...
Рейтинг: 0 / 0
проверить совместимость типов полей перед Insert
    #39709887
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
filllschi
что нафига? проверять совместимость типов или смотреть в сторону стринглиста?

Проверять совместимость типов.
...
Рейтинг: 0 / 0
проверить совместимость типов полей перед Insert
    #39709893
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zinpubНу array или valuelist - эт непринципиально,Угу. Кроме скорости поиска
...
Рейтинг: 0 / 0
проверить совместимость типов полей перед Insert
    #39709902
zinpub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_zinpubНу array или valuelist - эт непринципиально,Угу. Кроме скорости поиска

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


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