백운기 님의 델파이 웹프로그래밍이란 책을 공부하면서 거기 있는 내용을 따라 하고 있습니다.
근데 정작 코딩을 끝내고 컴파일하여 ActiveX 서버에 레지스터 한 후에
브라우저로 실행하니 다음과 같은 에러가 뜹니다.
책에 있는 소스와 비교도 해보고 Value를 AsString이나 AsInteger로 바꾸고 해봐도
똑같은 에러가 뜹니다.
아래 소스는 가장 최근에 입력된 설문조사를 추출하여 브라우저에 뿌려주는 Procedure를 호출하는 것입니다.
오류 형식:
PrjDoPoll.DoPoll (0x800A0BCD)
BOF 또는 EOF가 참이거나, 현재 레코드를 삭제했습니다. 요청한 작업에 현재 레코드가 필요합니다
/poll/dopoll.asp, line 9
Testing Delphi ASP
You should see the results of your Delphi Active Server method below
<% Set DelphiASPObj = Server.CreateObject("PrjDoPoll.DoPoll")
DelphiASPObj.ShowPoll // Line 9
Set DelphiASPObj = Nothing
%>
ShowPoll의 구현 부분은 다음과 같습니다.
procedure TDoPoll.ShowPoll;
var
Content : String;
i : integer;
begin
DM := TDM.Create(Nil);
with DM do
begin
qryQuest.Open;
qryAns.Open;
qryQuest.Last;
if qryQuest.Fieldbyname('QuestType').AsString = 'AA' then
begin
Content := Content + '다음 질문 내용에 대한 대답 한 가지를 선택해 주세요
' + qryQuest.FieldByName('Quest').AsString + '
'+
'
';
end
else if qryQuest.Fieldbyname('QuestType').AsString = 'BB' then
begin
Content := Content + '다음 질문 내용에 대한 대답 한 가지를 선택해 주세요
' + qryQuest.FieldByName('Quest').AsString + '
'+
'
';
end
else
begin
Content := Content + '다음 질문 내용에 대한 대답 한 가지를 선택해 주세요
' + qryQuest.FieldByName('Quest').AsString + '
'+
'
';
end;
qryQuest.Close;
qryAns.Close;
end;
Response.Write(Content);
DM.Free;
end;
아무래도 DB에 연계된 에러 같은데 Data Module에는 ADOConnection(ADOConnection1)과 ADOQuery 2개(qryQuest,qryAns),DataSource(srcQuest)를 포함시켰고 srcQuest의 DataSet에는 qryQuest를 qryAns의 DataSource에는 srcQuest를 지정하였습니다.qryQuest의 SQL에는 select * from Quest 를 qryAns의 SQL에는 select * from Answer where QuestNo = :QuestNo 를 그리고 parameters에는 QuestNo를 지정하고 Type은 Integer, Value에는 1을 주었습니다.ADOConnection1에는 MSSQL Server 에 만들어 둔 poll database를 지정하였습니다. Connected는 True로 지정하고 Login Prompt는 False로 지정하였습니다.
명절에 바쁘시겠지만 이글을 보신다면 한 번 에러를 찾아 주실 수 있겠습니까?
염치 없지만 부탁드리면서 좋은 추석 되십시오.
> 백운기 님의 델파이 웹프로그래밍이란 책을 공부하면서 거기 있는 내용을 따라 하고 있습니다.
>
> 근데 정작 코딩을 끝내고 컴파일하여 ActiveX 서버에 레지스터 한 후에
> 브라우저로 실행하니 다음과 같은 에러가 뜹니다.
> 책에 있는 소스와 비교도 해보고 Value를 AsString이나 AsInteger로 바꾸고 해봐도
> 똑같은 에러가 뜹니다.
> 아래 소스는 가장 최근에 입력된 설문조사를 추출하여 브라우저에 뿌려주는 Procedure를 호출하는 것입니다.
>
> 오류 형식:
> PrjDoPoll.DoPoll (0x800A0BCD)
> BOF 또는 EOF가 참이거나, 현재 레코드를 삭제했습니다. 요청한 작업에 현재 레코드가 필요합니다
> /poll/dopoll.asp, line 9
>
>
>
>
>
>
You should see the results of your Delphi Active Server method below
>
>
> <% Set DelphiASPObj = Server.CreateObject("PrjDoPoll.DoPoll")
> DelphiASPObj.ShowPoll // Line 9
> Set DelphiASPObj = Nothing
> %>
>
>
>
>
> ShowPoll의 구현 부분은 다음과 같습니다.
>
> procedure TDoPoll.ShowPoll;
> var
> Content : String;
> i : integer;
> begin
> DM := TDM.Create(Nil);
>
> with DM do
> begin
> qryQuest.Open;
> qryAns.Open;
> qryQuest.Last;
>
> if qryQuest.Fieldbyname('QuestType').AsString = 'AA' then
> begin
> Content := Content + '다음 질문 내용에 대한 대답 한 가지를 선택해 주세요
' + qryQuest.FieldByName('Quest').AsString + '
'+
> '';
> end
> else if qryQuest.Fieldbyname('QuestType').AsString = 'BB' then
> begin
> Content := Content + '다음 질문 내용에 대한 대답 한 가지를 선택해 주세요
' + qryQuest.FieldByName('Quest').AsString + '
'+
> '';
> end
> else
> begin
> Content := Content + '다음 질문 내용에 대한 대답 한 가지를 선택해 주세요
' + qryQuest.FieldByName('Quest').AsString + '
'+
> '';
> end;
> qryQuest.Close;
> qryAns.Close;
> end;
> Response.Write(Content);
>
> DM.Free;
> end;
>
> 아무래도 DB에 연계된 에러 같은데 Data Module에는 ADOConnection(ADOConnection1)과 ADOQuery 2개(qryQuest,qryAns),DataSource(srcQuest)를 포함시켰고 srcQuest의 DataSet에는 qryQuest를 qryAns의 DataSource에는 srcQuest를 지정하였습니다.qryQuest의 SQL에는 select * from Quest 를 qryAns의 SQL에는 select * from Answer where QuestNo = :QuestNo 를 그리고 parameters에는 QuestNo를 지정하고 Type은 Integer, Value에는 1을 주었습니다.ADOConnection1에는 MSSQL Server 에 만들어 둔 poll database를 지정하였습니다. Connected는 True로 지정하고 Login Prompt는 False로 지정하였습니다.
>
> 명절에 바쁘시겠지만 이글을 보신다면 한 번 에러를 찾아 주실 수 있겠습니까?
> 염치 없지만 부탁드리면서 좋은 추석 되십시오.
일단 상당히 비효율적인 코드구여...
보통 데이타셋 처리할때 for 문으로 이렇게 쓰는건 첨봤읍니다.
for i:=0 to qryAns.RecordCount-1 do
begin
...
..
qryAns.Next;
end
위의거를.. 밑어걸로 바꾸고 해보시길..
while not QryAns.EOF do
begin
..
...
QryAns.Next;
end;