Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
2개이상의 결과값을 돌려주는 함수
2개 이상의 결과값을 돌려주는 함수를 만들려면 어떻게 해야 하나요?
C에서는 그냥 call by reference로 끝이였던거 같은데..
프로시져에서 포인터를 써야하나요? 여튼 모르겠네요.
5
COMMENTS
김희중
•
2000.07.01 21:03
C에서 Call By Reference로 해결하셨다면 델파이의 인수를 넘겨줄때
Var을 붙이면 동일하게 작용합니다.
하지만 저 같은 경우는 그럴경우 Calss를 사용합니다.
조금 복잡하긴 하지만 입맛대로 데이타를 뽑아 낼수 있으니까요.
별 도움은 안되시겠지만 제가 작성한 주소찾기를 한번 올려봅니다.
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables, Grids, DBGrids;
type
TFindAddress = class
private
fData: Array of String;
fFieldName : Array of String;
FieldCount : Integer;
function GetData(index : Integer) : String;
function GetFieldData(index: String): String;
public
property Data[index : Integer] : String read GetData;
property FieldData[index : String] : String read GetFieldData;
function FindAddress(sData : String = '';
Cond : String = ''; x : Integer = 0; y : Integer = 0) : Boolean;
end;
type
TFrmAddrHlp = class(TForm)
DBGrid1: TDBGrid;
qCode: TQuery;
dsCode: TDataSource;
procedure DBGrid1DblClick(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
implementation
{$R *.DFM}
{ TFindAddress }
function TFindAddress.FindAddress(sData, Cond: String; x,
y: Integer): Boolean;
var
frmAddrHlp: TfrmAddrHlp;
SqlStr : String;
ConStr : String;
i : integer;
begin
SqlStr := '';
ConStr := '';
frmAddrHlp := TfrmAddrHlp.Create(Nil);
try
with frmAddrHlp do
Begin
SqlStr := 'SELECT * FROM CD04';
if sData <> '' then
Begin
ConStr := Format(' WHERE CD04020 LIKE ''%%%s%%'' ',[sData]);
end; //end of if sData <> ''
if Cond <> '' then
Begin
if ConStr = '' then
ConStr := Format(' WHERE %s ', [Cond])
else
ConStr := Format(' %s AND %s ',[ConStr, Cond]);
end; //end of if Cond <> ''
if qCode.Active then qCode.Close;
qCode.Sql.Clear;
qCode.Sql.Add(SqlStr);
qCode.Sql.Add(ConStr);
qCode.Open;
FieldCount := qCode.FieldCount;
SetLength(fData,FieldCount);
SetLength(fFieldName,FieldCount);
if qCode.IsEmpty then
Begin
Result := False;
end else if qCode.RecordCount = 1 then
Begin
for i := 0 to FieldCount -1 do
Begin
fData[i] := qCode.Fields[i].AsString;
fFieldName[i] := qCode.Fields[i].FieldName;
end; //end of for i -> FieldCount
Result := True;
end else
Begin
Left := x;
Top := y;
if ShowModal = mrOK then
Begin
for i := 0 to FieldCount -1 do
Begin
fData[i] := qCode.Fields[i].AsString;
fFieldName[i] := qCode.Fields[i].FieldName;
end; //end of for i -> FieldCount
Result := True;
end else
Begin
Result := True;
end; // end of if ShowModal = mrOK
end; //end of qCode.IsEmpty
end; // end of with frmFindAddress
finally
frmAddrHlp.Free;
end;
end;
procedure TFrmAddrHlp.DBGrid1DblClick(Sender: TObject);
begin
ModalResult := mrOK;
end;
function TFindAddress.GetData( index : Integer) : String;
begin
Result := fData[index];
end;
function TFindAddress.GetFieldData(index: String): String;
var
i : Integer;
begin
Result := '';
for i := 0 to FieldCount - 1 do
Begin
if index = fFieldName[i] then
Result := fData[i];
End;
end;
procedure TFrmAddrHlp.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = vk_Return then
ModalResult := mrOK
else if Key = vk_Escape then
ModalResult := mrCancel;
end;
end.
Mr.Q wrote:
> 2개 이상의 결과값을 돌려주는 함수를 만들려면 어떻게 해야 하나요?
> C에서는 그냥 call by reference로 끝이였던거 같은데..
> 프로시져에서 포인터를 써야하나요? 여튼 모르겠네요.
0
0
삭제
수정
댓글
김일영
•
2000.07.01 18:50
안녕하십니까.
오가는 질문과 답변을 보니 뭔가 약간 오해가 있는듯...
'2개 이상의 결과값을 돌려주는 함수'라고 하시는 것은...
프로시져에서 call by reference를 할 수 있느냐 그걸 물어보시는 것 같은데요.
당연히 됩니다. 프로시져 선언 시 인자 선언부분에서 인자명 앞에 'var '라고
하나 더 넣어주면 이 인자는 call by reference가 됩니다.
Object형의 인자는 그냥 call by reference가 되고요.
제가 알기론 call by reference가 가장 먼저 구현된 언어가 파스칼인줄 알고 있습니다.
C에서 포인터를 쓰는 것은 문법적으로 말하자면 call by reference는 아니고,
call by reference를 구현하기 위한 편법입니다.
Mr.Q wrote:
> 2개 이상의 결과값을 돌려주는 함수를 만들려면 어떻게 해야 하나요?
> C에서는 그냥 call by reference로 끝이였던거 같은데..
> 프로시져에서 포인터를 써야하나요? 여튼 모르겠네요.
0
0
삭제
수정
댓글
임형호
•
2000.07.01 10:07
Mr.Q wrote:
> 2개 이상의 결과값을 돌려주는 함수를 만들려면 어떻게 해야 하나요?
> C에서는 그냥 call by reference로 끝이였던거 같은데..
> 프로시져에서 포인터를 써야하나요? 여튼 모르겠네요.
제가 알기로는 2개이상의 값을 돌려주는 함수는 없는걸로 알고 있거든요.
하지만..약간 변칙적이긴해도 함수를 선언할때... 인수값의 대한 형을 선언하쟎습니까?
그때 변수명앞에 var을 붙여서 2개이상의 값을 리턴하는식의 구현은 가능한걸로 알고있습니다. 물론 그럴경우에는 넘겨주는 인수값이 변하기때문에 주의를 요하지만요.
잘 구성한다면 상관없을겁니다.
0
0
삭제
수정
댓글
Mr.Q
•
2000.07.01 11:23
임형호 wrote:
> Mr.Q wrote:
> > 2개 이상의 결과값을 돌려주는 함수를 만들려면 어떻게 해야 하나요?
> > C에서는 그냥 call by reference로 끝이였던거 같은데..
> > 프로시져에서 포인터를 써야하나요? 여튼 모르겠네요.
>
> 제가 알기로는 2개이상의 값을 돌려주는 함수는 없는걸로 알고 있거든요.
> 하지만..약간 변칙적이긴해도 함수를 선언할때... 인수값의 대한 형을 선언하쟎습니까?
> 그때 변수명앞에 var을 붙여서 2개이상의 값을 리턴하는식의 구현은 가능한걸로 알고있습니다. 물론 그럴경우에는 넘겨주는 인수값이 변하기때문에 주의를 요하지만요.
> 잘 구성한다면 상관없을겁니다.
임형호님 어제에 이은 답변 감사합니다. ^.^
01시38분에 올리셨던데, 야심한 밤에 수고 많으세요..
지금은 토욜이지요? 여기는 비가 오네요.. 오랜만에 천둥도 친답니다.
즐거운 주말되시구요.. 편안한밤 되세요.
0
0
삭제
수정
댓글
임형호
•
2000.07.01 12:35
Mr.Q wrote:
> 임형호 wrote:
> > Mr.Q wrote:
> > > 2개 이상의 결과값을 돌려주는 함수를 만들려면 어떻게 해야 하나요?
> > > C에서는 그냥 call by reference로 끝이였던거 같은데..
> > > 프로시져에서 포인터를 써야하나요? 여튼 모르겠네요.
> >
> > 제가 알기로는 2개이상의 값을 돌려주는 함수는 없는걸로 알고 있거든요.
> > 하지만..약간 변칙적이긴해도 함수를 선언할때... 인수값의 대한 형을 선언하쟎습니까?
> > 그때 변수명앞에 var을 붙여서 2개이상의 값을 리턴하는식의 구현은 가능한걸로 알고있습니다. 물론 그럴경우에는 넘겨주는 인수값이 변하기때문에 주의를 요하지만요.
> > 잘 구성한다면 상관없을겁니다.
>
> 임형호님 어제에 이은 답변 감사합니다. ^.^
> 01시38분에 올리셨던데, 야심한 밤에 수고 많으세요..
> 지금은 토욜이지요? 여기는 비가 오네요.. 오랜만에 천둥도 친답니다.
> 즐거운 주말되시구요.. 편안한밤 되세요.
아직 학생이라서...더구나 방학을 해서요. 아침에 졸린눈 부비며 출근한 직장도 없고, 안일어난다고 난리피는 부인은 더더구나 없으니 이 늦음밤 아니 이른새벽녁까지 학교에 남아 인터넷과 델파이를 벗삼아.... 놀구있습니다. 님께서도 즐거운 주말되시기를 바랍니다.
참..그리고 저두 네델란드 응원했습니다. 전 공격적인 축구를 좋아하거든요. 후후...
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
참신
•
2000.07.01 18:11
1
COMMENTS
/
0
LIKES
일반, 메모필드 사용 방법에 대하여... 제발 도움
홍세비
•
2000.07.01 20:58
참신 wrote: > 안녕하십니까.. > 메모필드를 DB에 저장할 경우 문제가 발생 하여 이렇게 도움을 청합니다...
사발우성
•
2000.07.01 17:41
4
COMMENTS
/
0
LIKES
T_T 암나 도와주이소............
nilriri
•
2000.07.01 18:11
http://www.qusoft.com/scripts/download.dll 위의 주소에 가시면 퀵레포트 최신번젼의 패치파일과 예제...
김범석
•
2000.07.02 01:15
QuickReport property 중 DataSet에 DetailBand에서 사용 할 Query 를 연결하지 않은 것 같군요.. ...
사발우성
•
2000.07.01 18:31
하요 재홍님..... 성함이 정재홍님 맞죠 캬캬캬 지난번에 도움 주셔서 넘넘 감솨감솨 (인사성 밝은 사발...
nilriri
•
2000.07.01 21:17
무료용 있는디~~ 거기 패스워드는 모릅니다. 하지만 아래쪽(잘 찾아보세요)에 보면 무료용있거든요......
Mr.Q
•
2000.07.01 09:01
5
COMMENTS
/
0
LIKES
2개이상의 결과값을 돌려주는 함수
2개 이상의 결과값을 돌려주는 함수를 만들려면 어떻게 해야 하나요? C에서는 그냥 call by reference로 끝이였던거 같은데.. 프로시져에서 포인터를 써야하나요? 여튼 모르겠네요.
김희중
•
2000.07.01 21:03
C에서 Call By Reference로 해결하셨다면 델파이의 인수를 넘겨줄때 Var을 붙이면 동일하게 작용합니다. ...
김일영
•
2000.07.01 18:50
안녕하십니까. 오가는 질문과 답변을 보니 뭔가 약간 오해가 있는듯... '2개 이상의 결과값을 돌려주는 ...
임형호
•
2000.07.01 10:07
Mr.Q wrote: > 2개 이상의 결과값을 돌려주는 함수를 만들려면 어떻게 해야 하나요? > C에서는 그냥 call...
Mr.Q
•
2000.07.01 11:23
임형호 wrote: > Mr.Q wrote: > > 2개 이상의 결과값을 돌려주는 함수를 만들려면 어떻게 해야 하나요? ...
임형호
•
2000.07.01 12:35
Mr.Q wrote: > 임형호 wrote: > > Mr.Q wrote: > > > 2개 이상의 결과값을 돌려주는 함수를 만들려면 어...
castle road
•
2000.07.01 07:58
1
COMMENTS
/
0
LIKES
Micro ODBC for Oracle driver 구합니다.
이재식
•
2000.07.02 00:19
castle road wrote: > Micro ODBC for Oracle 드라이버를 어디서 구해야 하지요? > ㅡ.ㅡ > > ## 자기...
초보자
2000.07.01 06:02
0
COMMENTS
/
0
LIKES
MS SQLserver의 로그인 아이디와 암호를 바꿀수 없나요?
델파이걸
2000.07.01 04:47
0
COMMENTS
/
0
LIKES
OpenDialog 에서 여러개 선택후 한번에 넣어버리기
타락천사
•
2000.07.01 04:09
1
COMMENTS
/
0
LIKES
[Paradox] 디비 예외를 잡으려면? ?_?
타락천사
•
2000.07.01 05:48
안녕하세여.. 타락임다..^^ 알아냈음다.. ^^ 지가 게을러서 다른 사람들 시킬려구 이런건 아니구여.....
질문자
•
2000.07.01 03:04
1
COMMENTS
/
0
LIKES
콤보박스 폭조정,그리드 금액 천단위구분콤마
톰과 제리
•
2000.07.01 07:51
콤보박스 폭조정 마루탑니다. 그럼.. function TForm1.GetTextWidth(S: String): Integer; begin Res...
왕왕초보
2000.07.01 03:05
0
COMMENTS
/
0
LIKES
방법좀 알려줘영..ㅠ..ㅠ
김태영
•
2000.07.01 02:54
2
COMMENTS
/
0
LIKES
경로를 알려하면...
심동훈
•
2000.07.01 03:00
김태영 wrote: > 비주얼 베이직에서는 현재의 경로를 지정해줄 때 app.path라고 하면 경로를 지정해주는데...
윤티
•
2000.07.02 01:36
심동훈 wrote: > 김태영 wrote: > > 비주얼 베이직에서는 현재의 경로를 지정해줄 때 app.path라고 하면 ...
해파리
2000.07.01 02:43
0
COMMENTS
/
0
LIKES
Runtime Error 217
김일영
2000.07.01 02:19
0
COMMENTS
/
0
LIKES
컴포넌트의 이벤트 - OleControl의 이벤트 연결 과정을...
황동건
2000.07.01 02:08
0
COMMENTS
/
0
LIKES
메모리DC에 라인그리는 방법좀 알려주세요.
초보
•
2000.07.01 01:45
1
COMMENTS
/
0
LIKES
sql로 인서트시에 가장 빠른 방법은?
성호종
•
2000.07.01 05:23
초보 wrote: 만약 stored procedure 를 쓰고 계신다면 DB SERVER 에서 text를 load 시키는 system command...
류응철
•
2000.07.01 01:32
1
COMMENTS
/
0
LIKES
죄송합니다.. 인스톨쉴드질문 하나만 더 하겠습니다.
류응철
•
2000.07.01 06:46
음... 이것두 해결 했습니다.... 음.. 도움말 도움 많이 되는군요... ^^; 류응철 wrote: > 보통 프...
이병웅
•
2000.07.01 01:02
1
COMMENTS
/
0
LIKES
디스크에 저장된 화일의 날짜와 시간아는법좀
심동훈
•
2000.07.01 03:02
이병웅 wrote: > 안녕하세요 > > > 디스크에 저장된 특정 화일의 저장된 날짜와 시간아는법좀 가르쳐...
임형호
•
2000.07.01 00:48
3
COMMENTS
/
0
LIKES
현재작업표시줄에 떠있는 프로그램 목록구하기
톰과 제리
•
2000.07.01 07:48
태스크바에 나타나는 프로그램 목록 예젭니다. 그럼. function EnumWindowsProc(Wnd: HWND; lb: TListb...
임형호
•
2000.07.01 08:32
감사합니다. 잘 되는것 같습니다. 정말로 감사드립니다. 톰과 제리 wrote: > 태스크바에 나타나는...
서동범
•
2000.10.31 20:39
그대로 했는데 안되는 이유가 뭘까요. 초보입니다. 게시판 뒤지다가 한번 써보려고 했는데 안되는군요. 한...
queen
•
2000.07.01 00:18
1
COMMENTS
/
0
LIKES
ora-00984에라에 대하여 부탁드려요..
송기현
•
2000.07.01 08:43
> "ORA-00984열은 사용할 수 없습니다."라고 에라가 발생합니다. > 어찌하면 해결할 수 있을까요. > 한...
사발우성
•
2000.07.01 00:04
7
COMMENTS
/
0
LIKES
흑흑~ 눈물만 난당....... 고수님들........
강인규
•
2000.07.01 00:27
사발우성
•
2000.07.01 00:31
임형호
•
2000.07.01 00:43
얀
•
2000.07.01 00:36
박철우
•
2000.07.01 00:42
사발우성
•
2000.07.01 05:03
사발우성
•
2000.07.01 01:43
김만성
2000.07.07 21:19
0
COMMENTS
/
0
LIKES
디버그창이 뜨는데. 이걸 어쩌죠? ^^;;;
Mr.Q
2000/07/01 09:01
Views
279
Likes
0
Comments
5
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
Var을 붙이면 동일하게 작용합니다.
하지만 저 같은 경우는 그럴경우 Calss를 사용합니다.
조금 복잡하긴 하지만 입맛대로 데이타를 뽑아 낼수 있으니까요.
별 도움은 안되시겠지만 제가 작성한 주소찾기를 한번 올려봅니다.
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables, Grids, DBGrids;
type
TFindAddress = class
private
fData: Array of String;
fFieldName : Array of String;
FieldCount : Integer;
function GetData(index : Integer) : String;
function GetFieldData(index: String): String;
public
property Data[index : Integer] : String read GetData;
property FieldData[index : String] : String read GetFieldData;
function FindAddress(sData : String = '';
Cond : String = ''; x : Integer = 0; y : Integer = 0) : Boolean;
end;
type
TFrmAddrHlp = class(TForm)
DBGrid1: TDBGrid;
qCode: TQuery;
dsCode: TDataSource;
procedure DBGrid1DblClick(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
implementation
{$R *.DFM}
{ TFindAddress }
function TFindAddress.FindAddress(sData, Cond: String; x,
y: Integer): Boolean;
var
frmAddrHlp: TfrmAddrHlp;
SqlStr : String;
ConStr : String;
i : integer;
begin
SqlStr := '';
ConStr := '';
frmAddrHlp := TfrmAddrHlp.Create(Nil);
try
with frmAddrHlp do
Begin
SqlStr := 'SELECT * FROM CD04';
if sData <> '' then
Begin
ConStr := Format(' WHERE CD04020 LIKE ''%%%s%%'' ',[sData]);
end; //end of if sData <> ''
if Cond <> '' then
Begin
if ConStr = '' then
ConStr := Format(' WHERE %s ', [Cond])
else
ConStr := Format(' %s AND %s ',[ConStr, Cond]);
end; //end of if Cond <> ''
if qCode.Active then qCode.Close;
qCode.Sql.Clear;
qCode.Sql.Add(SqlStr);
qCode.Sql.Add(ConStr);
qCode.Open;
FieldCount := qCode.FieldCount;
SetLength(fData,FieldCount);
SetLength(fFieldName,FieldCount);
if qCode.IsEmpty then
Begin
Result := False;
end else if qCode.RecordCount = 1 then
Begin
for i := 0 to FieldCount -1 do
Begin
fData[i] := qCode.Fields[i].AsString;
fFieldName[i] := qCode.Fields[i].FieldName;
end; //end of for i -> FieldCount
Result := True;
end else
Begin
Left := x;
Top := y;
if ShowModal = mrOK then
Begin
for i := 0 to FieldCount -1 do
Begin
fData[i] := qCode.Fields[i].AsString;
fFieldName[i] := qCode.Fields[i].FieldName;
end; //end of for i -> FieldCount
Result := True;
end else
Begin
Result := True;
end; // end of if ShowModal = mrOK
end; //end of qCode.IsEmpty
end; // end of with frmFindAddress
finally
frmAddrHlp.Free;
end;
end;
procedure TFrmAddrHlp.DBGrid1DblClick(Sender: TObject);
begin
ModalResult := mrOK;
end;
function TFindAddress.GetData( index : Integer) : String;
begin
Result := fData[index];
end;
function TFindAddress.GetFieldData(index: String): String;
var
i : Integer;
begin
Result := '';
for i := 0 to FieldCount - 1 do
Begin
if index = fFieldName[i] then
Result := fData[i];
End;
end;
procedure TFrmAddrHlp.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = vk_Return then
ModalResult := mrOK
else if Key = vk_Escape then
ModalResult := mrCancel;
end;
end.
Mr.Q wrote:
> 2개 이상의 결과값을 돌려주는 함수를 만들려면 어떻게 해야 하나요?
> C에서는 그냥 call by reference로 끝이였던거 같은데..
> 프로시져에서 포인터를 써야하나요? 여튼 모르겠네요.