Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TQuery и динмамические запросы 
:(
    Опции темы
FPMOleg
Дата 17.10.2006, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 15.5.2006

Репутация: нет
Всего: нет



вот есть у меня такой SQL запрос
Код

insert into :tabla_name (id,company_code,code,date_ins,date_up,countries,zirka,date_from,date_to,truck,weight,cube,
repeat_cnt,order_type,date_activate,time_activate,cargo,marshrutte,distincts,operator_id)
values (:id,:company_code,:code,:date_ins,:date_up,:countries,:zirka,:date_from,:date_to,:truck,:weight,:cube,
:repeat_cnt,:order_type,:date_activate,:time_activate,:cargo,:marshrutte,:distincts,:operator_id);


вот есть такой код на делфи 
Код

        with QrOrders do
          begin
            Close;
            Params.ParamValues['id'] := SERVER_NAME + TbPDX.FieldValues['company_code'];
            Params.ParamValues['company_code'] := TbPDX.FieldValues['company_code'];
            Params.ParamValues['code'] := TbPDX.FieldValues['code'];

            str_temp := VarToStr(TbPDX.FieldValues['date_insert']);
            if (CountPos(':',str_temp)>0) then  str_temp := DateToStr(Now);
            Params.ParamValues['date_ins'] := FormatDateTime('yyyy-mm-dd',StrToDate(str_temp));

            Params.ParamValues['date_up'] := Params.ParamValues['date_ins'];
            Params.ParamValues['countries'] := TbPDX.FieldValues['countries'];
            Params.ParamValues['zirka'] := TbPDX.FieldValues['zirka'];

            str_temp := VarToStr(TbPDX.FieldValues['date_from']);
            if (CountPos(':',str_temp)>0) then  str_temp := DateToStr(Now);
            Params.ParamValues['date_from'] := FormatDateTime('yyyy-mm-dd',StrToDate(str_temp));

            str_temp := VarToStr(TbPDX.FieldValues['date_to']);
            if (CountPos(':',str_temp)>0) then  str_temp := DateToStr(Now);
            Params.ParamValues['date_to'] := FormatDateTime('yyyy-mm-dd',StrToDate(str_temp));

            Params.ParamValues['truck'] := TbPDX.FieldValues['truck'];
            Params.ParamValues['weight'] := TbPDX.FieldValues['weight'];
            Params.ParamValues['cube'] := TbPDX.FieldValues['cube'];
            Params.ParamValues['repeat_cnt'] := TbPDX.FieldValues['PLANDATEPOVTOR'];
            if (VarType(TbPDX.FieldValues['order_type'])<>varNull) and (VarType(TbPDX.FieldValues['order_type'])<>varEmpty)then
              Params.ParamValues['order_type'] := TbPDX.FieldValues['order_type']
            else
              Params.ParamValues['order_type'] := '';

            str_temp := VarToStr(TbPDX.FieldValues['date_activate']);
            if (CountPos(':',str_temp)>0) then  str_temp := DateToStr(Now);
            Params.ParamValues['date_activate'] := FormatDateTime('yyyy-mm-dd',StrToDate(str_temp));

            str_temp := VarToStr(TbPDX.FieldValues['time_activate']);
            if (CountPos('.',str_temp)<2) then  str_temp := DateToStr(Now);
            Params.ParamValues['time_activate'] := FormatDateTime('hh:mm:ss',StrToDate(str_temp));

            Params.ParamValues['cargo'] := TbPDX.FieldValues['cargo'];
            Params.ParamValues['marshrutte'] := TbPDX.FieldValues['marshrutte'];
            Params.ParamValues['distincts'] := TbPDX.FieldValues['distincts'];
            Params.ParamValues['operator_id'] := findOperatorID(A[AnzTokens-1]);

            str_temp := VarToStr(TbPDX.FieldValues['date_activate']);
            if (CountPos(':',str_temp)>0) then  str_temp := DateToStr(Now);
            table_date := FormatDateTime('yyyy_mm',StrToDate(str_temp));

            if (CompareText(date,table_date)<>0) then Params.ParamValues['tabla_name'] := 'request_' + table_date
            else                                      Params.ParamValues['tabla_name'] := 'request_main';
            ExecSQL;
          end;
        TbPDX.Next;


а вот какой вылитает баг при попытке выполнить запрос: OPeration not applicable - из-за чего он вылетает?



PM MAIL   Вверх
Rodman
Дата 17.10.2006, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



Код

with QrOrders do
          begin
            Close;
            SQL.Clear;
            SQL.Add('insert into ');
            if (CompareText(date,table_date)<>0) then Params.ParamValues['tabla_name'] := SQL.Add('request_' + table_date);
            else                                      Params.ParamValues['tabla_name'] := SQL.Add('request_main');
                     SQL.Add('(id,company_code,code,date_ins,date_up,countries,zirka,date_from,date_to,truck,weight,cube,
repeat_cnt,order_type,date_activate,time_activate,cargo,marshrutte,distincts,operator_id)
values (');
SQL.Add(SERVER_NAME + TbPDX.FieldValues['company_code']+',');
SQL.Add(TbPDX.FieldValues['company_code']+',');
SQL.Add(TbPDX.FieldValues['code']+',');
SQL.Add('...  ');*// и так далее передай явно все параметры

            ExecSQL;
          end;
        TbPDX.Next;


в таком методе не используй :, и что теперь будет????
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Savek
Дата 18.10.2006, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

Репутация: 7
Всего: 7



Какая база?
Имя таблицы в качестве параметра скорее всего передать нельзя

Rodman, в твоем варианте будут проблемы со вставкой даты и времени, передача значений параметрами предпочтительнее
PM MAIL   Вверх
FPMOleg
Дата 18.10.2006, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 15.5.2006

Репутация: нет
Всего: нет



спасибо всем за ответы
с этой задачей я справился по другому:
Код

            if (isEmptyValue(TbPDX.FieldValues['date']))then
              table_date := FormatDateTime('yyyy_mm',VarToDateTime(TbPDX.FieldValues['date']))
            else
              table_date := FormatDateTime('yyyy_mm',VarToDateTime(TbPDX.FieldValues['date'])-1);

            if (CompareText(date,table_date)<>0) then
              table_name := 'request_' + table_date
            else
              table_name := 'request_main';

            Close;
            SQL.Clear;
            SQL_part := 'insert into %s';
            SQL.Add(Format(SQL_part,[table_name]));
            SQL.Add('(id,company_code,code,date_ins,date_up,countries,comments,zirka,date_from,date_to,truck,weight,cube,');
            SQL.Add('repeat_cnt,deleted,order_type,date_activate,time_activate,cargo,marshrutte,distincts,operator_id)');
            SQL.Add('values (:id,:company_code,:code,:date_ins,:date_up,:countries,:comments,:zirka,:date_from,:date_to,:truck,:weight,:cube,');
            SQL.Add(':repeat_cnt,:deleted,:order_type,:date_activate,:time_activate,:cargo,:marshrutte,:distincts,:operator_id)');


            try
              ParamByName('id').Value := SERVER_NAME + FormatDateTime('yyyymmddhhnnsszzz',Now);
            except
              on EDatabaseError do
                with Params.CreateParam(ftString,'id',ptInput) do
                  AsString := SERVER_NAME + FormatDateTime('yyyymmddhhnnsszzz',Now);
            end;

            try
              ParamByName('company_code').Value := TbPDX.FieldValues['code_company'];
            except
              on EDatabaseError do
                with Params.CreateParam(ftString,'company_code',ptInput) do
                  AsString := TbPDX.FieldValues['code_company'];
            end;
            ParamByName('code').Value := TbPDX.FieldValues['code_order'];

            if (isEmptyValue(TbPDX.FieldValues['date']))then
              str_temp1 := FormatDateTime('yyyy-mm-dd',VarToDateTime(TbPDX.FieldValues['date']))
            else
              str_temp1 := '0000-00-00';
            ParamByName('date_ins').Value := str_temp1;
            ParamByName('date_up').Value  := str_temp1;

            ParamByName('countries').Value := TbPDX.FieldValues['comment1'];
            if (isEmptyValue(TbPDX.FieldValues['comment2']))then
              str_temp1 := VarToStr(TbPDX.FieldValues['comment2'])
            else
              str_temp1 := '';
            if (isEmptyValue(TbPDX.FieldValues['comment3']))then
              str_temp2 := VarToStr(TbPDX.FieldValues['comment3'])
            else
              str_temp2 := '';
            ParamByName('comments').Value := str_temp1 + ' ' + str_temp2;

            if (isEmptyValue(TbPDX.FieldValues['zirka'])) then
               ParamByName('zirka').Value := '*'
            else
               ParamByName('zirka').Value := '';

            str_temp1 := VarToStr(ParamByName('comments').Value);
            if (Length(str_temp1)>0) then
              begin
                //-- ðàçáèâàåì ñòðîêó ñ êîìåíòàðèÿìè íÿ ñëîâà --//
                DateCommentCount := Explode(DateComment,' ',str_temp1);
                if (CountPos('-',DateComment[0])>0) then
                  begin
                     dateFromToCount := Explode(dateFromTo,'-',DateComment[0]);
                     try
                       tempDateTime := StrToDateTime(dateFromTo[0]);
                       str_temp2 := FormatDateTime('yyyy-mm-dd',tempDateTime);
                     except
                       str_temp2 := '0000-00-00'
                     end;
                     ParamByName('date_from').Value := str_temp2;
                     try
                       tempDateTime := StrToDateTime(dateFromTo[1]);
                       str_temp2 := FormatDateTime('yyyy-mm-dd',tempDateTime);
                     except
                       str_temp2 := '0000-00-00'
                     end;
                     ParamByName('date_to').Value := str_temp2;
                  end
                else
                  begin
                    ParamByName('date_from').Value := '0000-00-00';
                    ParamByName('date_to').Value   := '0000-00-00';
                  end;
                if (isEmptyValue(DateComment[1])) then
                  ParamByName('truck').Value := DateComment[1]
                else
                  ParamByName('truck').Value := varNull;
                k:=2;
                for j:= k to DateCommentCount-1 do
                  begin
                    if (CountPos('òí.',DateComment[j])>0) then
                      begin
                        WeightStrCount:=Explode(WeightStr,'òí.',DateComment[j]);
                        ParamByName('weight').Value := WeightStr[0];
                        k:=j+1;
                      end
                    else
                      ParamByName('weight').Value := varNull;
                    if (CountPos('êóá.',DateComment[j])>0) then
                      begin
                        CubeStrCount := Explode(CubeStr,'êóá.',DateComment[j]);
                        ParamByName('cube').Value := CubeStr[0];
                        k:=j+1;
                      end
                    else
                      ParamByName('cube').Value := varNull;
                  end;
              end
            else
              begin
                ParamByName('date_from').Value := varNull;
                ParamByName('date_to').Value := varNull;
                ParamByName('truck').Value := varNull;
                ParamByName('weight').Value := varNull;
                ParamByName('cube').Value := varNull;
              end;

            if isEmptyValue(TbPDX.FieldValues['povtor']) then
              ParamByName('repeat_cnt').Value := TbPDX.FieldValues['']
            else
              ParamByName('repeat_cnt').Value := varNull;

            if isEmptyValue(TbPDX.FieldValues['deleted'])  then
              if (TbPDX.FieldValues['deleted']='D') then
                ParamByName('deleted').Value := 1
              else
                ParamByName('deleted').Value := 0
            else
              ParamByName('deleted').Value := 0;

            if isEmptyValue(TbPDX.FieldValues['order_type']) then
              ParamByName('order_type').Value := TbPDX.FieldValues['']
            else
              ParamByName('order_type').Value := varNull;

            if isEmptyValue(TbPDX.FieldValues['order_activate_date']) then
              begin
                try
                  tempDateTime := VarToDateTime(TbPDX.FieldValues['order_activate_date']);
                  ParamByName('date_activate').Value := FormatDateTime('yyyy-mm-dd',tempDateTime);
                except
                  ParamByName('date_activate').Value := '0000-00-00';
                end;
              end
            else
              ParamByName('date_activate').Value := '0000-00-00';

            if isEmptyValue(TbPDX.FieldValues['order_activate_time']) then
              begin
                try
                  tempDateTime := VarToDateTime(TbPDX.FieldValues['order_activate_time']);
                  ParamByName('time_activate').Value := FormatDateTime('hh-nn-ss',tempDateTime);
                except
                  ParamByName('time_activate').Value := '00:00:00';
                end;
              end
            else
              ParamByName('time_activate').Value := '00:00:00';

            if isEmptyValue(TbPDX.FieldValues['order_cargo']) then
              ParamByName('cargo').Value := TbPDX.FieldValues['order_cargo']
            else
              ParamByName('cargo').Value := varNull;

            if isEmptyValue(TbPDX.FieldValues['order_cities']) then
              ParamByName('marshrutte').Value := TbPDX.FieldValues['order_cities'] 
            else
              ParamByName('marshrutte').Value := varNull;

            if isEmptyValue(TbPDX.FieldValues['distincts']) then
              ParamByName('distincts').Value := TbPDX.FieldValues['distincts']
            else
              ParamByName('distincts').Value := varNull;
            str_temp1 := IntToStr(findOperatorID(A[AnzTokens-1]));
            ParamByName('operator_id').Value := str_temp1;
            ExecSQL;


теперь EDBEngineError выдате такой баг : Could not find Object. 
Если же закометировать строки где добавляетс SQL то все нормально работает и все данные добавляются.
Стоит такая задача: анализируя данные поля date распихать данные в ту или иную таблицу.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1226 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.