GUID и "пустые" поля в таблице

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
Ragazor
Сообщения: 6
Зарегистрирован: 25 ноя 2005, 11:06

GUID и "пустые" поля в таблице

Сообщение Ragazor » 25 ноя 2005, 11:23

При генерации GUID в таблицу, примерно 3-5 значений на 1000(каждый раз разное ко-во) в таблице не отображаются визуально никакими символами, тоесть на вид в ячейке пусто.

В программе есть необходимость делать SAVETOFILE, (TpFIBDataSet)
При считываини LOADFROMFILE получаются глюки с "пустыми" полями.
Для тестов создал набор данных куда записываю текстовый эквивалент GUID, так вот сохранение такого набора там где эти "пустые" строки дает {00000000-0000-0000-0000-000000000000}, что значит что GUID = 0 условно.
Хотя на этапе генерции GUIDов ставил проверку:
If GUIDToStr(tmpG) = '{00000000-0000-0000-0000-000000000000}' then
MsgError('bla bla bla');
Вообщем нулевых нет. В мемку пихал, нулевых нет.(ну так и должно быть собственно)

Вызов UDF в IB (2005.04.24) CREATEGUID тоже даёт такие "пустые" поля, со всеми вытекающими отсюда последствиями.

Если это не глюки сервера, то как можно обойти данную проблему?
Может есть альтернативный вариант операций с гуидами?

Delphi6, Firebird 1.5

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 25 ноя 2005, 13:38

А CHARACTER SET BINARY или OCTETS для гуидного поля поставил? Что дает isql для "пустых" полей? Если он дает хоть что-то, пинай Сержа на предмет работы со значениями, включающими #0.

Ragazor
Сообщения: 6
Зарегистрирован: 25 ноя 2005, 11:06

Сообщение Ragazor » 25 ноя 2005, 13:41

CREATE DOMAIN FIB$GUID AS
CHAR(16) CHARACTER SET OCTETS
COLLATE OCTETS
...

>>Что дает isql для "пустых" полей?

незнаю о чем это.


Если он дает хоть что-то, пинай Сержа на предмет работы со значениями, включающими #0.

Кто такой Серж тоже незнаю :)
как его "пинать" ? :)

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 25 ноя 2005, 14:43

isql это такая консольная клиентская утилита, позволяющая выполнять запросы к БД. В данном случае она полезна тем, что корректно отобразает в шестнадцатиричном виде поля типа OCTETS. Если она показывает в "пустом" поле что-то кроме нулей, значит FIB+ некорректно работает с полями содержащими нулевой символ (что, впрочем, маловероятно). Если же там действительно полные нули, то виновата твоя процедура генерации GUID и занесения его в базу.
Серж Востриков - текущий разработчик FIB+. Пинать его лучше по почте. Но очень аккуратно и лучше всего с тестовым примером (или того лучше - патчем) как и любого другого разработчика.

Ragazor
Сообщения: 6
Зарегистрирован: 25 ноя 2005, 11:06

Сообщение Ragazor » 25 ноя 2005, 15:00

Скажем так,
QWSQL.SQL.Text := "INSERT INTO NEW_TABLE (GUID) VALUES(:G)";
for i := 1 to 5000 do begin
CreateGUID(tmpG);
QWSQL.ParamByName('G').AsGUID:= tmpG;
QWSQL.ExecQuery;
end;
QWSQL.Transaction.Commit;
ошибиться тут невозможно.

тот же результат дает вызов хранимой процедуры вида:

CREATE PROCEDURE NEW_PROCEDURE (
PTIMES INTEGER)
AS
DECLARE VARIABLE I INTEGER;
begin
i = 0;
While (i < :ptimes) do begin
INSERT INTO new_table (GUID)
VALUES (CREATEGUID(1));
i = i+1;
end
end


Где можно найти эту утилиту?
и собственно мыло господина Серж?

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 25 ноя 2005, 15:14

Ragazor писал(а): VALUES (CREATEGUID(1));
А вот тут я не уверен. Не факт что нулевые символы корректно передаются из UDF в движок. Помнится, Клавдий довольно долго там копался, ругаясь на чем свет стоит...
Ragazor писал(а): Где можно найти эту утилиту?
Каталог bin сервера.
Ragazor писал(а): и собственно мыло господина Серж?
Что, нынче FIB+ идет без документации или в ней нет пункта как докладывать о багах? Тогда поищи на сайте www.devrace.com

Ragazor
Сообщения: 6
Зарегистрирован: 25 ноя 2005, 11:06

Сообщение Ragazor » 25 ноя 2005, 16:01

>>Что, нынче FIB+ идет без документации или в ней нет пункта как докладывать о багах?

я как-то употребил слово "Баг" сервера, так меня съели с потрохами.
уже боюсь :)

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 27 ноя 2005, 17:41

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

Ответить