Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2008, 20:07   #1
pushkin42
 
Регистрация: 19.03.2007
Сообщений: 6
По умолчанию Incorrect values within SQLDA structure при выполнении запроса

Есть вот функция такая: (D2007, FB2, dbExpress):
PHP код:
function TSQLDatabaseThread.SelectSQLA(const QString; const ParamNames,
 
ParamValues: array of Variant): TSQLDataSet;

var 
CommandString;
   
PNIPNCInteger;

 function 
ParamType(const ParamVariant): Byte;
 var 
basicTypeTVarType;
 
begin
   basicType 
:= VarType(Param) and VarTypeMask;

   case 
basicType of
     varEmpty     
Result := VT_EMPTY;
     
varNull      Result := VT_NULL;
     
varSmallInt  Result := VT_SMALLINT;
     
varInteger   Result := VT_INTEGER;
     
varSingle    Result := VT_SINGLE;
     
varDouble    Result := VT_DOUBLE;
     
varCurrency  Result := VT_CURRENCY;
     
varDate      Result := VT_DATE;
     
varBoolean   Result := VT_BOOL;
     
varVariant   Result := VT_VARIANT;
     
varUnknown   Result := VT_UNKNOWN;
     
varByte      Result := VT_BYTE;
     
varWord      Result := VT_WORD;
     
varLongWord  Result := VT_WORD;
     
varInt64     Result := VT_INT64;
     
varStrArg    Result := VT_STRING;
     
varString    Result := VT_STRING;
     
varAny       Result := VT_ANY;
     
varTypeMask  Result := VT_TYPEMASK;
     else 
Result := VT_UNKNOWN;
   
end;
 
end;
begin
 
// выполнение запроса (определение автоматическое)
 
Result := TSQLDataSet.Create(nil);

 if 
Connection.Connected=False then begin
   Connection
.Connected := True;
 
end;

 
Result.SQLConnection := Connection;

 
Result.ParamCheck := (Length(ParamNames)<>0);

 
//try
   
Result.CommandText := Q;
   
Command := Parse(Q#32, 1);

//    Result.Params := TParams.Create(Result);
   
Result.Params.Clear;
   
Result.Close;

   if 
Length(ParamNames)<>0 then begin
   
// перечисление параметров
     
PNC := Length(ParamNames)-1;  // количество параметров
     
for PNI := 0 to PNC do begin
       
case ParamType(ParamValues[PNI]) of
         VT_UNKNOWN
,
         
VT_NULL        Result.Params.CreateParam(ftUnknownParamNames[PNI], ptInputOutput);

         
VT_SMALLINT    Result.Params.CreateParam(ftSmallIntParamNames[PNI], ptInputOutput);
         
VT_INTEGER,
         
VT_SINGLE      Result.Params.CreateParam(ftIntegerParamNames[PNI], ptInputOutput);
         
VT_DOUBLE      Result.Params.CreateParam(ftFloatParamNames[PNI], ptInputOutput);
         
VT_CURRENCY    Result.Params.CreateParam(ftCurrencyParamNames[PNI], ptInputOutput);
         
VT_DATE        Result.Params.CreateParam(ftDateParamNames[PNI], ptInputOutput);
         
VT_BOOL        Result.Params.CreateParam(ftBooleanParamNames[PNI], ptInputOutput);
         
VT_VARIANT     Result.Params.CreateParam(ftVariantParamNames[PNI], ptInputOutput);
         
VT_BYTE        Result.Params.CreateParam(ftFloatParamNames[PNI], ptInputOutput);
         
VT_WORD,
         
VT_LWORD       Result.Params.CreateParam(ftWordParamNames[PNI], ptInputOutput);
         
VT_INT64       Result.Params.CreateParam(ftIntegerParamNames[PNI], ptInputOutput);
         
VT_STRARG,

         
VT_STRING      Result.Params.CreateParam(ftStringParamNames[PNI], ptInputOutput);

         
VT_ANY         Result.Params.CreateParam(ftVarBytesParamNames[PNI], ptInputOutput);
         
VT_TYPEMASK    Result.Params.CreateParam(ftUnknownParamNames[PNI], ptInputOutput);

         else
                          
Result.Params.CreateParam(ftVariantParamNames[PNI],
                          
ptUnknown);
       
end;
       
Result.Params.ParamByName(ParamNames[PNI]).AsString :=
       
String(ParamValues[PNI]);
     
end;
   
end;

   if (
Command='SELECT'then begin
     Result
.Open
   end 
else begin
     Result
.ExecSQL();
     
FinalizeSQL(Result);
   
end;
 {
 
except
   Result
.Close;
   
Result.Free;
   Exit(
nil);
 
end;
 }
end
Почему-то если параметрами подсунуть скажем ['uid', 3] то выполняется нормально и возвращает датасет. А вот если подсунуть скажем ['uname', 'какая_то_строка'], выдает "Incorrect values within SQLDA structure". ParamCheck := False не помогло.

Где могут быть грабли?
pushkin42 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при выполнении запроса в столбце "Дата сдачи" оставить даты, которые соответствуют введенному месяцу klukva666 Microsoft Office Access 5 10.03.2008 17:52
При выполнении запроса из проекта пропадает связь с сервером D-mon БД в Delphi 4 19.11.2007 12:24
Ошибка при выполнении запроса Шани БД в Delphi 4 27.07.2007 13:04
Ошибка при выполнении запроса Elena БД в Delphi 3 14.06.2007 15:13
Ошибка при выполнении запроса Elena БД в Delphi 2 25.05.2007 16:19