안녕하세요... 최재원 입니다. 흑흑 저는 안녕 못 하네요...
완존히 뚜껑 열렸습니다.
모가 잘 못된건지...
환경 : server -- windows2000 에 오라클 8.1.5
client -- 나 ( window98SE, CPU 500, RAM 128 )
오라클경험 -- 생전처음 봤음
오라클연결은 잘 된것 같아요... Tsnping(요걸루 테스트 하라고 해서리 확인 했
음...)
오라클 홈페쥐에서 안되는 영어 실력으로 억지로 해석해서 tablespace 만들고
사용자 만들고, 권한주고, 테이블 만들고(혹시 테이블명과, 필드명을 한글이라서..)
저 회사에 들어와서 6개월 동안 파라독스만 만지작 거렸습니다.
나름 데로 고생했다구 생각 했는데 insert도 못하다니... ㅜ.ㅜ
알리어스로 연결해서리 Tatabase,Query,DataSource,DBGrid,DataModule.....
아래는 소스 임다..
procedure TFProject.SpeedButton1Click(Sender: TObject);
var
pibada : String;
k : Integer;
begin
with FDM.Query1 do begin
Close;
SQL.Clear;
SQL.Add('select * from 프로젝트관리');
Open;
end;
with FDM.Query1 do begin
Close;
SQL.Clear;
SQL.Add('select Max(프로젝트번호) 프로젝트번호 from 프로젝트관리');
Open;
end;
pibada := FDM.Query1.Fields[0].AsString;
if pibada = '' then begin // 테이블에서 가장큰 숫자(스트링) 찾아서
pibada := '001';
end else if pibada <> '' then begin
pibada := IntToStr(StrToInt(pibada) + 1); // 1 더하고
if Length(pibada) <> 3 then // 앞에다 0 붙임다
for k:=0 to 3 do begin
pibada:='0'+pibada;
if Length(pibada) = 3 then
break;
end;
end;
Edit1.Text := pibada;
with FDM.Query1 do begin
Close;
SQL.Clear;
SQL.Add('insert into 프로젝트관리');
SQL.Add('(프로젝트번호,'); // char(3) primary key
SQL.Add('프로젝트이름,'); // varchar2(30)
SQL.Add('프로젝트생성날짜,'); // date
SQL.Add('현재버젼코드,'); // varchar2(20)
SQL.Add('비고)'); // varchar2(1000)
SQL.Add('values');
SQL.Add('(:프로젝트번호,');
SQL.Add(':프로젝트이름,');
SQL.Add(':프로젝트생성날짜,');
SQL.Add(':현재버젼코드,');
SQL.Add(':비고)');
ParamByName('프로젝트번호').AsString := Edit1.Text;
ParamByName('프로젝트이름').AsString := Edit2.Text;
ParamByName('프로젝트생성날짜').AsDate := DateTimePicker1.Date;
ParamByName('현재버젼코드').AsString := Edit3.Text;
ParamByName('비고').AsString := Memo1.Text;
ExecSQL; // ******** <-- 요기서 치명적 에러 ********
end;
with FDM.Query1 do begin
Close;
SQL.Clear;
SQL.Add('select * from 프로젝트관리');
Open;
end;
end;
결과 : 해당 항목에다 내용 넣고, speedbutton1 꾹 눌르면, access vaiolation
에러나면서 ok 버튼 눌르면 왜 디버깅 윈도우 중 CPU 라는 전혀 정체를 알
수 없는 창이 하나 뜨잖아요....
거기에 첫번째 포커스에 4D62FFF1 cmp dword ptr [edx], $00 화살표 위치
위에 것은 컴파일 시에 일어나는 상황이고, 실행파일을 직접 실행하면
"잘못된 연산을 수행 하였습니다. "가 나 옵니다.
진짜 깨는 건 다시 프로그램을 실행시키고 보면, insert가 되었네요...하하
SQL문으로 되는 건 SELECT 밖에 없네요.... 어디에 문제가 있을까요????
헉... 저한테 문제가 있다구요.... ㅜ.ㅜ
프로그램 실행시키고나서 insert가 되어있는 것은
db 에 입력하는 방법의 문제입니다..
오라클은 매우 예민한(--;) 데이타베이스라서,,,
유저에게 큰(?)권한을 주져...
우선 bde를 사용하셔서 네이트브로 오라클을 연결하셔야 합니다...
물론 odbc로도 되지만, 오라클 특유의 성질(^; 성질더럽습니다.),,,
때문에 좀 재미가 엄꾸여...
oracle 에 보시면, 아마 인스톨런가...(하두 오래되서 ) 거 띄우시고 보면,,,
오라클에서 만든 디비를 연결하는 알리아스를 만드는 툴이 있져,,,
거를 먼저 만드시구...
뭐뭐.world이런 형태의 화일이 생길겁니다... 아마두(전 7.3버전 밖에 몰라서리 가장 마니 지금도 사용되고 있구... 아직까지는 가장 안정적이져...)
이제 bde에서 보시면,,, 드라이버를 먼저잡으시구...(이것두 꽤 복잡하던데)
아까 만든거 (뭐뭐.world)가 생기구...
그리구 shared no autocommit, share autocommit 선택하는 거 나올겁니다...
무슨얘기냐면... commit을 만나야 디비에 쓸것이냐,,, 아니면 바루쓸것이냐..
모 이런건데...
오라클은 아마두 디폴트로 shared no autocommit일거라구 생각됩니다..(아마)...
어수선하게 대답을 했네여...
왠만큼 큰 프로젝트가 아님 오라클은 관리할게 넘 만쿠...
마니 알아야,, 본전임다.. 제경험상...
구냥mssql7.0정도가 적당하다구 생각 되는데...
어쨋거나...대답은 않