GUID и "пустые" поля в таблице
Модератор: kdv
GUID и "пустые" поля в таблице
При генерации 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
В программе есть необходимость делать 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
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
isql это такая консольная клиентская утилита, позволяющая выполнять запросы к БД. В данном случае она полезна тем, что корректно отобразает в шестнадцатиричном виде поля типа OCTETS. Если она показывает в "пустом" поле что-то кроме нулей, значит FIB+ некорректно работает с полями содержащими нулевой символ (что, впрочем, маловероятно). Если же там действительно полные нули, то виновата твоя процедура генерации GUID и занесения его в базу.
Серж Востриков - текущий разработчик FIB+. Пинать его лучше по почте. Но очень аккуратно и лучше всего с тестовым примером (или того лучше - патчем) как и любого другого разработчика.
Серж Востриков - текущий разработчик FIB+. Пинать его лучше по почте. Но очень аккуратно и лучше всего с тестовым примером (или того лучше - патчем) как и любого другого разработчика.
Скажем так,
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
Где можно найти эту утилиту?
и собственно мыло господина Серж?
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
Где можно найти эту утилиту?
и собственно мыло господина Серж?
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
А вот тут я не уверен. Не факт что нулевые символы корректно передаются из UDF в движок. Помнится, Клавдий довольно долго там копался, ругаясь на чем свет стоит...Ragazor писал(а): VALUES (CREATEGUID(1));
Каталог bin сервера.Ragazor писал(а): Где можно найти эту утилиту?
Что, нынче FIB+ идет без документации или в ней нет пункта как докладывать о багах? Тогда поищи на сайте www.devrace.comRagazor писал(а): и собственно мыло господина Серж?