Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Access violation =( 
:(
    Опции темы
uranpro
Дата 6.6.2008, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

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



при попытке запустить функцию, выдает ErMessage: Access violation ...

Код

function TTradeXReportForm.GetDateInfoCHPV(D:TDateTime):TCHPV;

const SQLCodeSum='select sum(price*quantity-discount) as Summ from v_tr_1_sumbydate';
      SQLCodeRet='select sum(price+discount) as Summ from v_cr_GlbRet';
      SQLCode18   =' and (Tax=18)';
      SQLCode10   =' and (Tax=10)';
      SQLCodeNal  =' and (Ten=1)';
      SQLCodeBNal =' and (Ten<>1)';

var cS:cSQL;

 procedure GenSQLSum18;
 begin
 QSum.SQL.Clear;
 QSum.SQL.Add(SQLCodeSum);
 QSum.SQL.Add('where '+SQLGlobParams);
 QSum.SQL.Add(' and (TDate '+cS.BetweenDate(DateToStr(D),DateToStr(D))+')'+
 SQLCode18+SQLCodeNal);
 QSum.Open;
 end;

 procedure GenSQLSum10;
 begin
 QSum.SQL.Clear;
 QSum.SQL.Add(SQLCodeSum);
 QSum.SQL.Add('where '+SQLGlobParams);
 QSum.SQL.Add(' and (TDate '+cS.BetweenDate(DateToStr(D),DateToStr(D))+')'+
 SQLCode10+SQLCodeNal);
 QSum.Open;
 end;

 procedure GenSQLBSum10;
 begin
 QSum.SQL.Clear;
 QSum.SQL.Add(SQLCodeSum);
 QSum.SQL.Add('where '+SQLGlobParams);
 QSum.SQL.Add(' and (TDate '+cS.BetweenDate(DateToStr(D),DateToStr(D))+')'+
 SQLCode10+SQLCodeBNal);
 QSum.Open;
 end;

 procedure GenSQLBSum18;
 begin
 QSum.SQL.Clear;
 QSum.SQL.Add(SQLCodeSum);
 QSum.SQL.Add('where '+SQLGlobParams);
 QSum.SQL.Add(' and (TDate '+cS.BetweenDate(DateToStr(D),DateToStr(D))+')'+
 SQLCode18+SQLCodeBNal);
 QSum.Open;
 end;

 procedure GenSQLRet10;
 begin
 QSum.SQL.Clear;
 QSum.SQL.Add(SQLCodeRet);
 QSum.SQL.Add('where '+SQLGlobParams);
 QSum.SQL.Add(' and (TDate '+cS.BetweenDate(DateToStr(D),DateToStr(D))+')'+
 SQLCode10+SQLCodeNal);
 QSum.Open;
 end;

 procedure GenSQLRet18;
 begin
 QSum.SQL.Clear;
 QSum.SQL.Add(SQLCodeRet);
 QSum.SQL.Add('where '+SQLGlobParams);
 QSum.SQL.Add(' and (TDate '+cS.BetweenDate(DateToStr(D),DateToStr(D))+')'+
 SQLCode18+SQLCodeNal);
 QSum.Open;
 end;

 procedure GenSQLBRet10;
 begin
 QSum.SQL.Clear;
 QSum.SQL.Add(SQLCodeRet);
 QSum.SQL.Add('where '+SQLGlobParams);
 QSum.SQL.Add(' and (TDate '+cS.BetweenDate(DateToStr(D),DateToStr(D))+')'+
 SQLCode10+SQLCodeBNal);
 QSum.Open;
 end;

 procedure GenSQLBRet18;
 begin
 QSum.SQL.Clear;
 QSum.SQL.Add(SQLCodeRet);
 QSum.SQL.Add('where '+SQLGlobParams);
 QSum.SQL.Add(' and (TDate '+cS.BetweenDate(DateToStr(D),DateToStr(D))+')'+
 SQLCode18+SQLCodeBNal);
 QSum.Open;
 end;

begin
cS:=cSQL.Create;

Result.Date:=DateToStr(D);

GenSQLSum10;
Result.NDS10.NalSumWORet:=QSumSumm.AsString; QSum.Close;

GenSQLSum18;
Result.NDS18.NalSumWORet:=QSumSumm.AsString; QSum.Close;

GenSQLBSum10;
Result.NDS10.BNalSumWORet:=QSumSumm.AsString; QSum.Close;

GenSQLBSum18;
Result.NDS18.BNalSumWORet:=QSumSumm.AsString; QSum.Close;

GenSQLRet10;
Result.NDS10.NalRetSum:=QSumSumm.AsString;    QSum.Close;

GenSQLRet18;
Result.NDS18.NalRetSum:=QRetSumm.AsString;    QSum.Close;

GenSQLBRet10;
Result.NDS10.BNalRetSum:=QRetSumm.AsString;   QSum.Close;

GenSQLBRet18;
Result.NDS18.BNalRetSum:=QRetSumm.AsString;   QSum.Close;

cS.Free;
end;


не могу понять в чем трабл ((( и еще когда я убираю
Код

QSum.SQL.Add(' and (TDate '+cS.BetweenDate(DateToStr(D),DateToStr(D))+')'+SQLCode18+SQLCodeBNal);

в каждой проке, ошибки нет.

cSQL:
Код

unit uSQL;

interface

type
cSQL = class
     public
       function DateToSQLDate(S:String; NewDay:boolean):string;
       function BetweenDate(Date1,Date2:string):string;
       constructor Create;
     private
       function DateToDate00(S:String):string; {15.05.2008 >> 2008/05/15}
       function DateToDate23(S:String):string; {15.05.2008 >> 2008/05/15}
       end;

implementation

constructor cSQL.Create;
begin

end;

function cSQL.DateToDate00(S:String):string;
begin
Result:='0000-00-00 00:00:00';
Result[1]:= S[7];
Result[2]:= S[8];
Result[3]:= S[9];
Result[4]:= S[10];
Result[6]:= S[4];
Result[7]:= S[5];
Result[9]:= S[1];
Result[10]:=S[2];
end;

function cSQL.DateToDate23(S:String):string;
begin
Result:='0000-00-00 23:59:00';
Result[1]:= S[7];
Result[2]:= S[8];
Result[3]:= S[9];
Result[4]:= S[10];
Result[6]:= S[4];
Result[7]:= S[5];
Result[9]:= S[1];
Result[10]:=S[2];
end;

function cSQL.DateToSQLDate(S:String; NewDay:boolean):string; //'ss'''+inttostr(3)+'''aa');
begin
if NewDay=true then
 Result:='CONVERT(DATETIME, '''+DateToDate00(s)+''', 102)'
else
 Result:='CONVERT(DATETIME, '''+DateToDate23(s)+''', 102)'
end;

function cSQL.BetweenDate(Date1,Date2:string):string;
begin
Result:='BETWEEN '+DateToSQLDate(Date1,true)+' AND '+
                    DateToSQLDate(Date2,false);
end;


end.


в чем дело ?


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
uranpro
Дата 6.6.2008, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

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



переместите тему в "для новичков" плс


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
pseud
Дата 6.6.2008, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

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



Цитата(uranpro @  6.6.2008,  11:01 Найти цитируемый пост)
в чем дело ?


похоже дело в том, что тебе досталась куча чьего-то кривого кода и ты хочешь, чтоб тебе помогли его разгрести.

Добавлено @ 11:50
поформатировал бы хоть текст кода нормально, а то в такой простыне разобраться....

Добавлено @ 12:00
предлагаю твои функции:
Код

       function DateToSQLDate(S:String; NewDay:boolean):string;
       function BetweenDate(Date1,Date2:string):string;
       function DateToDate00(S:String):string; {15.05.2008 >> 2008/05/15}
       function DateToDate23(S:String):string; {15.05.2008 >> 2008/05/15}

заменить одной короткой функцией:
Код

function cSQL.BetweenDate(Date1,Date2: TDate):string;
begin
  Result := 
    'BETWEEN ' + 
    'CONVERT(DATETIME, ' + QuotedStr(FormatDateTime('YYYY-MM-DD 00:00:00', Date1)) +', 102) ' +
    'AND '+  
    'CONVERT(DATETIME, ' + QuotedStr(FormatDateTime('YYYY-MM-DD 23:59:59', Date2)) +', 102) ';
end;


Это сообщение отредактировал(а) pseud - 6.6.2008, 12:01


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
pseud
Дата 6.6.2008, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

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



у тебя во всех procedure GenSQL... идет работа с QSum.
зато потом ты пытаешься получить данные из
Код

QSumSumm.AsString;
QRetSumm.AsString; 

однако....



--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
pseud
Дата 6.6.2008, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

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



как гриться брюки превращаются в элегантные шорты:

Код

function TTradeXReportForm.GetDateInfoCHPV(D:TDateTime):TCHPV;

  const
    SQLCodeSum='select sum(price*quantity-discount) as Summ from v_tr_1_sumbydate';
    SQLCodeRet='select sum(price+discount) as Summ from v_cr_GlbRet';
    SQLCode18   =' and (Tax=18)';
    SQLCode10   =' and (Tax=10)';
    SQLCodeNal  =' and (Ten=1)';
    SQLCodeBNal =' and (Ten<>1)';

  function GetNDSValue(ASelect: string; AWhere: string): string;
  begin
    Result := '';
    with QSum do
    begin
      Active := False;
      SQL.Clear;
      SQL.Add(ASelect);
      SQL.Add('WHERE ' + SQLGlobParams);
      SQL.Add('AND TDate BETWEEN');
      SQL.Add('          CONVERT(DATETIME, ' + QuotedStr(FormatDateTime('YYYY-MM-DD 00:00:00', Date1)) +', 102)');
      SQL.Add('          AND');
      SQL.Add('          CONVERT(DATETIME, ' + QuotedStr(FormatDateTime('YYYY-MM-DD 23:59:59', Date2)) +', 102)';
      SQL.Add(AWhere);
      Active := True;
      if not IsEmpty then
        Result := Fields[0].AsString;
    end;
  end;

begin
  Result.Date := DateToStr(D);

  Result.NDS10.NalSumWORet := GetNDSValue(SQLCodeSum, SQLCode10 + SQLCodeNal);
  Result.NDS18.NalSumWORet := GetNDSValue(SQLCodeSum, SQLCode18 + SQLCodeNal);
  Result.NDS10.BNalSumWORet := GetNDSValue(SQLCodeSum, SQLCode10 + SQLCodeBNal);
  Result.NDS18.BNalSumWORet := GetNDSValue(SQLCodeSum, SQLCode18 + SQLCodeBNal);
  Result.NDS10.NalRetSum := GetNDSValue(SQLCodeRet, SQLCode10 + SQLCodeNal);
  Result.NDS18.NalRetSum := GetNDSValue(SQLCodeRet, SQLCode18 + SQLCodeNal);
  Result.NDS10.BNalRetSum := GetNDSValue(SQLCodeRet, SQLCode10 + SQLCodeBNal);
  Result.NDS18.BNalRetSum := GetNDSValue(SQLCodeRet, SQLCode18 + SQLCodeBNal);
end;



--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
uranpro
Дата 11.6.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

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



!! спасибо


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

Запрещено:

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

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


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

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

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


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

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


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

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


 




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


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

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