Всем привед )
Уперся в трабл. У меня 64-битная убунта.
Работаю с постгресом. Вдруг захотелось ощутить с сервером БД обратную связь, т.е. возможность принимать от сервака сообщения, инициированные самим серваком.
Из стандартных велосипедов нашел пару компонентов обеспечивающих обратную связь.
zeos и PostgresDAC... PostgresDAC - платный... А зеос... сцк на 64 битах работает криво, по понятным причинам (при DataSet.Next выдает Bookmark was not found). Пробовал искать 64-битную версию - пока не нашел. Мож валяется у кого-нить скачанный, проверенный вариант?
Продолжаю поиски...
Канешно можно было бы написать на в постгресе хранимку, в которой создавать сокет и плеваться через него в клиента, но блин ввиду того что клиентов может быть очень много - это гемор... тем более при наличии компонент которые ужэ это могут.
А может, у кого-нить есть еще предложения по реализации этой коварной задумки?! ))
Lazarus 30 64 bit и Zeos 6.6.6. Error:Bookmark was not found
Модератор: Модераторы
- Little_Roo
- энтузиаст
- Сообщения: 639
- Зарегистрирован: 27.02.2009 18:56:36
- Откуда: Санкт-Петербург
dr.miller писал(а): Пробовал искать 64-битную версию - пока не нашел.
И не найдешь ...
dr.miller
Скачайте самую свежую версию: http://zeoslib.svn.sourceforge.net/view ... lib/trunk/
У меня тоже Ubuntu 64 - работает нормально. Правда с Postgre я не работаю - мощи не хватает.
Скачайте самую свежую версию: http://zeoslib.svn.sourceforge.net/view ... lib/trunk/
У меня тоже Ubuntu 64 - работает нормально. Правда с Postgre я не работаю - мощи не хватает.
Vadim спасибо, сейчас буду пробовать...
Добавлено спустя 1 час 3 минуты 48 секунд:
Re: Lazarus 30 64 bit и Zeos 6.6.6. Error:Bookmark was not found
Отлично, помогло. Огромное спасибо.
Кстати, если кто работает с zeos и юзает PostgreSQL, может напороться на проблему парсинга запросов, в которых прописано приведение типа. (Например select field::bigint from table). Проблема состоит в том что зеос считает что на месте такого приведения типа стоит параметр, заменяет двойное двоеточие на одинарное, и выдает ошибку выполнения запроса.
SQL Error: ERROR: syntax error at or near ":"
СТРОКА 1:select id_portfolio:bigint, 'test':characte..
Чтобы обойти этот трабл можно подкорректировать сорсы компонента (zeos 6.6.6, 7 - работает).
В модуле ZSqlStrings. Надо зменить метод TZSQLStrings.RebuildAll.
На
(с) исправления Оldwayder
Добавлено спустя 1 час 3 минуты 48 секунд:
Re: Lazarus 30 64 bit и Zeos 6.6.6. Error:Bookmark was not found
Отлично, помогло. Огромное спасибо.
Кстати, если кто работает с zeos и юзает PostgreSQL, может напороться на проблему парсинга запросов, в которых прописано приведение типа. (Например select field::bigint from table). Проблема состоит в том что зеос считает что на месте такого приведения типа стоит параметр, заменяет двойное двоеточие на одинарное, и выдает ошибку выполнения запроса.
SQL Error: ERROR: syntax error at or near ":"
СТРОКА 1:select id_portfolio:bigint, 'test':characte..
Чтобы обойти этот трабл можно подкорректировать сорсы компонента (zeos 6.6.6, 7 - работает).
В модуле ZSqlStrings. Надо зменить метод TZSQLStrings.RebuildAll.
На
Код: Выделить всё
procedure TZSQLStrings.RebuildAll;
var
Tokens: TStrings;
TokenValue: string;
TokenType: TZTokenType;
TokenIndex: Integer;
ParamIndex: Integer;
ParamIndices: TIntegerDynArray;
ParamIndexCount: Integer;
ParamName, SQL: string;
Tokenizer: IZTokenizer;
procedure NextToken;
begin
TokenType := TZTokenType({$IFDEF FPC}Pointer({$ENDIF}
Tokens.Objects[TokenIndex]{$IFDEF FPC}){$ENDIF});
TokenValue := Tokens[TokenIndex];
Inc(TokenIndex);
end;
begin
FParams.Clear;
FStatements.Clear;
SQL := '';
ParamIndexCount := 0;
SetLength(ParamIndices, ParamIndexCount);
{ Optimization for empty query. }
If Length(Trim(Text)) = 0 then
Exit;
{ Optimization for single query without parameters. }
if (not FParamCheck or (Pos(FParamChar, Text) = 0))
and (not FMultiStatements or (Pos(';', Text) = 0)) then
begin
FStatements.Add(TZSQLStatement.Create(Text, ParamIndices, FParams));
Exit;
end;
Tokenizer:=GetTokenizer;
Tokens := Tokenizer.TokenizeBufferToList(Text,
[toSkipComments, toUnifyWhitespaces]);
try
TokenIndex := 0;
repeat
NextToken;
{ Processes parameters. }
if ParamCheck and (TokenValue = FParamChar) then
begin
NextToken;
if (TokenType <> ttEOF) and (TokenValue <> FParamChar) [b]and (TokenValue <> '=')[/b] then
begin
{ Check for correct parameter type. }
if not (TokenType in [ttWord, ttQuoted]) then
raise EZDatabaseError.Create(SIncorrectToken);
SQL := SQL + '?';
ParamName := TokenValue;
if (ParamName <> '') and (ParamName[1] in [#39, '`', '"', '[']) then
begin
ParamName := Tokenizer.GetQuoteState.
DecodeString(ParamName, ParamName[1]);
end;
ParamIndex := FindParam(ParamName);
if ParamIndex < 0 then
ParamIndex := FParams.Add(ParamName);
Inc(ParamIndexCount);
SetLength(ParamIndices, ParamIndexCount);
ParamIndices[ParamIndexCount - 1] := ParamIndex;
Continue;
end
[b]else
if (TokenType <> ttEOF) and ((TokenValue = ':') or (TokenValue = '=')) then
SQL := SQL + ':';[/b]
end;
{ Adds a DML statement. }
if (TokenType = ttEOF) or (FMultiStatements and (TokenValue = ';')) then
begin
SQL := Trim(SQL);
if SQL <> '' then
FStatements.Add(TZSQLStatement.Create(SQL, ParamIndices, FParams));
SQL := '';
ParamIndexCount := 0;
SetLength(ParamIndices, ParamIndexCount);
end
{ Adds a default token. }
else
SQL := SQL + TokenValue;
until TokenType = ttEOF;
finally
Tokens.Free;
end;
end;
- alexs
- долгожитель
- Сообщения: 4069
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
dr.miller писал(а):Кстати, если кто работает с zeos и юзает PostgreSQL, может напороться на проблему парсинга запросов, в которых прописано приведение типа. (Например select field::bigint from table). Проблема состоит в том что зеос считает что на месте такого приведения типа стоит параметр, заменяет двойное двоеточие на одинарное, и выдает ошибку выполнения запроса.
А нефиг было в Postgre изобретать не стандартные расширения.
Шутка.
А на самом деле - используй приведение типа по стандарту (cast) - и будет счастье.
PS
7-й zeos нормально работает на 64 битах в линуксе.
Но там свои глюки. В транковом fpc без напильника рушится при уничтожении компоненты-запроса. Постараюсь разработчикам сегодня патчик отправить.
