Q&A

  • Error converting data type varchar to numeric
또 이렇게 글을 올릴니다..

고수오빠들의 조언으로

첫번째 에러 ''is not a valie integer value

였는데여 integer 를 수정했어여..ParamByName('N3').AsInteger := StrToIntDef(Seq, 0); 으로여 근데 또 에러가 나는거 있죠..흐흐..

MS-SQL ERROR

Error converting data type varchar to numeric

근데 테이블과 델파이소스는 이상이 없거든여...

이것두 자료는 DB에 잘 쌓이고여..근데 에러가 나는 거 있죠..

정말 실력이 없는게 넘 슬픈거 있죠..전 대타로 물러받은건데...

제가 안짜서 잘 모르겠어여..

짱오빠들 다시한번 조언부탁드립니다.

시간뺐어서 미안하구여...정말 해결되면 함쏘고 싶어여...*^^*??

그냥 쏘스 올려볼께여..함 훌터보시고 힘드시면 욕하지 마시구여...

이쁘게 봐주세여..저두 좀 힘들거든여...

소스.....

unit Uipb_recv;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Db, DBTables, Grids, DBGrids, ExtCtrls, ShellAPI, Menus, inifiles;

type

TRecv = class(TForm)

PORT: TDatabase;

QPort: TQuery;

QNum: TQuery;

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;



var

Recv: TRecv;



implementation



{$R *.DFM}



procedure TRecv.FormClose(Sender: TObject; var Action: TCloseAction);

begin

{ DATABASE인 PORT와의 연결을 끊기 }

PORT.Connected := FALSE;

end;



procedure TRecv.FormCreate(Sender: TObject);

var

I, K, R_SEQ: Integer;

Sdt, Pdiv, Shcd, Shnm, Ncd, Ownm, Ownat: string;

Opnm, Opnat, Indiv, Sccd, Scdiv, Scf, Scfnm: string;

Scfnm2, Sct, Sctnm, Sctnm2, Pltm, Ag, Hanm, Eanm: string;

Godiv, Tuboat, Exyn, Pi, Pihnm, Pienm, Piseq: string;

Copiyn, Copi1, Copi1hnm, Copi1enm, Copi2, Copi2hnm: string;

Copi2enm, Coscd, Cosdiv, Coscf, Coscfnm, Coscfnm2: string;

Cosct, Cosctnm, Cosctnm2, Copltm, Re, Feno: string;

Seq, Ton, Len, Wid, Dep, Dra, Ctdt: string;

FP: Textfile;

Buf: string;

path: string;

IPini: Tinifile;

s_uid, s_pwd: string;

begin

{ 웹서버의 DB에 접속하기 위한 ID/PASSWORD를 portmis.ini파일로 부터 불러온다 }

IPini := Tinifile.Create(ExtractFilePath(Application.ExeName) + 'portmis.ini');

s_uid := IPini.ReadString('정보', 'USERID', '');

s_pwd := IPini.ReadString('정보', 'PASSWORD', '');

IPini.Free;



PORT.Params.Add('USER NAME=' + s_uid);

PORT.Params.Add('PASSWORD=' + s_pwd);



{ 웹서버의 DB에 insert하기위해 파일을 연다 }

path := ParamStr(1);

AssignFile(FP, path);

Reset(FP);



if PORT.Connected = FALSE then

PORT.Connected := TRUE;



{ DTNO를 설정하기 위한 부분 }

R_SEQ := 0; //수정 부분..''is not a valid integer value 때문에

QNum.Close;

QNum.SQL.Clear;

QNum.SQL.Add('SELECT MAX(DTNO) FROM PILTBL ');

QNum.SQL.Add('WHERE STDT = CONVERT(char, GETDATE(), 102)');

// Oracle인 경우

// QNum.SQL.Add('WHERE TO_CHAR(STDT,''YYYYMMDD'') = TO_CHAR(SYSDATE,''YYYYMMDD'')');

QNum.Open;



R_SEQ := QNum.Fields[0].AsInteger;

R_SEQ := R_SEQ + 1;

QNum.Close;



{ 웝서버의 DB에 insert하는 부분 }

while not Eof(FP) do

begin

Sdt := ''; Seq := ''; Pdiv := ''; Shcd := ''; Shnm := ''; Ncd := ''; Ton := '';

Len := ''; Wid := ''; Dep := ''; Ownm := ''; Ownat := ''; Opnm := ''; Opnat := '';

Dra := ''; Indiv := ''; Sccd := ''; Scdiv := ''; Scf := ''; Scfnm := ''; Scfnm2 := '';

Sct := ''; Sctnm := ''; Sctnm2 := ''; Pltm := ''; Ag := ''; Hanm := ''; Eanm := '';

Godiv := ''; Tuboat := ''; Exyn := ''; Pi := ''; Pihnm := ''; Pienm := ''; Piseq := '';

Copiyn := ''; Copi1 := ''; Copi1hnm := ''; Copi1enm := ''; Copi2 := ''; Copi2hnm := '';

Copi2enm := ''; Coscd := ''; Cosdiv := ''; Coscf := ''; Coscfnm := ''; Coscfnm := '';

Coscfnm2 := ''; Cosct := ''; Cosctnm := ''; Cosctnm2 := ''; Copltm := '';

Re := ''; Feno := ''; Ctdt := '';

Readln(FP, Buf);

K := 0;

for I := 1 to Length(Buf) do

begin

{ '|' 는 임의의 구분자입니다.

임의의 구분자는 어떤 것을 사용하든지 문제는 없지만

' '은 안된다 왜냐하면 데이터가 없는 필드와 구분이 않되기 때문이다. }

if buf[i] = '|' then

K := K + 1

else

case K of

0: Sdt := Sdt + Buf[i];

1: Seq := Seq + buf[i];

2: Pdiv := Pdiv + buf[i];

3: Shcd := Shcd + buf[i];

4: Shnm := Shnm + buf[i];

5: Ncd := Ncd + buf[i];

6: Ton := Ton + buf[i];

7: Len := Len + buf[i];

8: Wid := Wid + buf[i];

9: Dep := Dep + buf[i];

10: Ownm := Ownm + buf[i];

11: Ownat := Ownat + buf[i];

12: Opnm := Opnm + buf[i];

13: Opnat := Opnm + buf[i];

14: Dra := Dra + buf[i];

15: Indiv := Indiv + buf[i];

16: Sccd := Sccd + buf[i];

17: Scdiv := Scdiv + buf[i];

18: Scf := Scf + buf[i];

19: Scfnm := Scfnm + buf[i];

20: Scfnm2 := Scfnm2 + buf[i];

21: Sct := Sct + buf[i];

22: Sctnm := Sctnm + buf[i];

23: Sctnm2 := Sctnm2 + buf[i];

24: Pltm := Pltm + buf[i];

25: Ag := Ag + buf[i];

26: Hanm := Hanm + buf[i];

27: Eanm := Eanm + buf[i];

28: Godiv := Godiv + buf[i];

29: Tuboat := Tuboat + buf[i];

30: Exyn := Exyn + buf[i];

31: Pi := Pi + buf[i];

32: Pihnm := Pihnm + buf[i];

33: Pienm := Pienm + buf[i];

34: Piseq := Piseq + buf[i];

35: Copiyn := Copiyn + buf[i];

36: Copi1 := Copi1 + buf[i];

37: Copi1hnm := Copi1hnm + buf[i];

38: Copi1enm := Copi1enm + buf[i];

39: Copi2 := Copi2 + buf[i];

40: Copi2hnm := Copi2hnm + buf[i];

41: Copi2enm := Copi2enm + buf[i];

42: Coscd := Coscd + buf[i];

43: Cosdiv := Cosdiv + buf[i];

44: Coscf := Coscf + buf[i];

45: Coscfnm := Coscfnm + buf[i];

46: Coscfnm2 := Coscfnm2 + buf[i];

47: Cosct := Cosct + buf[i];

48: Cosctnm := Cosctnm + buf[i];

49: Cosctnm2 := Cosctnm2 + buf[i];

50: Copltm := Copltm + buf[i];

51: Re := Re + buf[i];

52: Feno := Feno + buf[i];

53: Ctdt := Ctdt + buf[i];

end;

end;



{ 수치 데이터의 DEFAUL값을 0으로 SETTING }

if Ton = '' then Ton := '0';

if Len = '' then Len := '0';

if Wid = '' then Wid := '0';

if Dep = '' then Dep := '0';

if Dra = '' then Dra := '0';



{ SQL 문장 }

with QPort do

begin

Close;

SQL.Clear;

SQL.Add('INSERT INTO PILTBL (STDT, DTNO, SQNO, PDIV,SPCD, SPNM, NACD, ');

SQL.Add('STON, LENG, WIDT, DEPT, OWNM, OWNA, OPNM, OPNA, DRAF, IODV, SCCD, SCDV, ');

SQL.Add('SCPF, SCFN, SFN2, SCPT, SCTN, STN2, PLTM, AGNT, HAGN, EAGN, GSDV, TGBT, ');

SQL.Add('ETYN, PILT, PTHN, PTEN, PTSQ, CPYN, CPT1, C1HN, C1EN, CPT2, C2HN, C2EN, ');

SQL.Add('CSCD, CSDV, CSPF, CSFN, CSN2, CSPT, CSTN, CST2, CPTM, RSLT, FENO, CTDT, UPDT, UPID) ');

SQL.Add('VALUES (:N1, :N2, :N3, :N4, :N5, :N6, :N7, :N8, :N9, :N10, :N11, ');

SQL.Add(':N12, :N13, :N14, :N15, :N16, :N17, :N18, :N19, :N20, :N21, :N22, ');

SQL.Add(':N23, :N24, :N25, :N26, :N27, :N28, :N29, :N30, :N31, :N32, :N33, ');

SQL.Add(':N34, :N35, :N36, :N37, :N38, :N39, :N40, :N41, :N42, :N43, :N44, ');

SQL.Add(':N45, :N46, :N47, :N48, :N49, :N50, :N51, :N52, :N53, :N54, :N55, CONVERT(char, GETDATE()), ''IPPILOT'') ');

// Oracle인 경우

// SQL.Add(':N45, :N46, :N47, :N48, :N49, :N50, :N51, :N52, :N53, :N54, :N55, TO_CHAR(SYSDATE,''YYYYMMDD HH24:MI:SS''), ''IPPILOT'') ');

ParamByName('N1').AsString := Trim(Sdt);

ParamByName('N2').AsInteger := R_SEQ;

// ParamByName('N3').AsInteger := StrToInt(Seq);

ParamByName('N3').AsInteger := StrToIntDef(Seq, 0);//수정함 ''is not a valid integer value 때문에..

ParamByName('N4').AsString := Trim(Pdiv);

ParamByName('N5').AsString := Trim(Shcd);

ParamByName('N6').AsString := Trim(Shnm);

ParamByName('N7').AsString := Trim(Ncd);

ParamByName('N8').AsFloat := StrToFloat(Ton);

ParamByName('N9').AsFloat := StrToFloat(Len);

ParamByName('N10').AsFloat := StrToFloat(Wid);

ParamByName('N11').AsFloat := StrToFloat(Dep);

ParamByName('N12').AsString := Trim(Ownm);

ParamByName('N13').AsString := Trim(Ownat);

ParamByName('N14').AsString := Trim(Opnm);

ParamByName('N15').AsString := Trim(Opnat);

ParamByName('N16').AsFloat := StrToFloat(Dra);

ParamByName('N17').AsString := Trim(Indiv);

ParamByName('N18').AsString := Trim(Sccd);

ParamByName('N19').AsString := Trim(Scdiv);

ParamByName('N20').AsString := Trim(Scf);

ParamByName('N21').AsString := Trim(Scfnm);

ParamByName('N22').AsString := Trim(Scfnm2);

ParamByName('N23').AsString := Trim(Sct);

ParamByName('N24').AsString := Trim(Sctnm);

ParamByName('N25').AsString := Trim(Sctnm2);

ParamByName('N26').AsString := Trim(Pltm);

ParamByName('N27').AsString := Trim(Ag);

ParamByName('N28').AsString := Trim(Hanm);

ParamByName('N29').AsString := Trim(Eanm);

ParamByName('N30').AsString := Trim(Godiv);

ParamByName('N31').AsString := Trim(Tuboat);

ParamByName('N32').AsString := Trim(Exyn);

ParamByName('N33').AsString := Trim(Pi);

ParamByName('N34').AsString := Trim(Pihnm);

ParamByName('N35').AsString := Trim(Pienm);

ParamByName('N36').AsString := Trim(Piseq);

ParamByName('N37').AsString := Trim(Copiyn);

ParamByName('N38').AsString := Trim(Copi1);

ParamByName('N39').AsString := Trim(Copi1hnm);

ParamByName('N40').AsString := Trim(Copi1enm);

ParamByName('N41').AsString := Trim(Copi2);

ParamByName('N42').AsString := Trim(Copi2hnm);

ParamByName('N43').AsString := Trim(Copi2enm);

ParamByName('N44').AsString := Trim(Coscd);

ParamByName('N45').AsString := Trim(Cosdiv);

ParamByName('N46').AsString := Trim(Coscf);

ParamByName('N47').AsString := Trim(Coscfnm);

ParamByName('N48').AsString := Trim(Coscfnm2);

ParamByName('N49').AsString := Trim(Cosct);

ParamByName('N50').AsString := Trim(Cosctnm);

ParamByName('N51').AsString := Trim(Cosctnm2);

ParamByName('N52').AsString := Trim(Copltm);

ParamByName('N53').AsString := Trim(Re);

ParamByName('N54').AsString := Trim(Feno);

ParamByName('N55').AsString := Trim(Ctdt);

ExecSQL;

end;

end;

CloseFile(FP);

PostMessage(Handle, WM_CLOSE, 0, 0);

end;



end.





이건 MS-SQL 테이블 이구여..

/****** Object: Table [dbo].[PILTBL] ******/

if exists (select * from sysobjects where id = object_id(N'[dbo].[PILTBL]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

drop table [dbo].[PILTBL]

GO



/****** Object: Table [dbo].[PILTBL] ******/

CREATE TABLE [dbo].[PILTBL] (

[STDT] [varchar] (10) NOT NULL , /* 도선일자 */

[DTNO] [numeric] (3, 0) NOT NULL , /* INSERT 순번 */

[SQNO] [numeric] (3, 0) NOT NULL , /* 일련번호 */

[PDIV] [varchar] (1) NULL , /* 도선구분 1.입항, 2.입거, 3.출항, 4.출거, 5.선거이동, 6.묘지이동, 9.기타*/

[SPCD] [varchar] (10) NOT NULL , /* 호출부호 */

[SPNM] [varchar] (50) NULL , /* 선명 */

[NACD] [varchar] (6) NULL , /* 선적구분 1.내국적, 2.외국적*/

[STON] [numeric] (6, 0) NULL , /* 톤수 */

[LENG] [numeric] (4, 1) NULL , /* 장 */

[WIDT] [numeric] (3, 1) NULL , /* 폭 */

[DEPT] [numeric] (3, 1) NULL , /* 심 */

[OWNM] [varchar] (30) NULL , /* 선주명 */

[OWNA] [varchar] (15) NULL , /* 선주국적 */

[OPNM] [varchar] (50) NULL , /* 운항자명 */

[OPNA] [varchar] (15) NULL , /* 운항자국적 */

[DRAF] [numeric] (4, 2) NULL , /* 흘수 */

[IODV] [varchar] (1) NULL , /* 내외구분 1.내항선, 2.외항선*/

[SCCD] [varchar] (3) NULL , /* 구간코드 */

[SCDV] [varchar] (1) NULL , /* 구간구분코드 */

[SCPF] [varchar] (3) NULL , /* 도선시작구간 */

[SCFN] [varchar] (8) NULL , /* 도선시작구간명 */

[SFN2] [varchar] (15) NULL , /* 부두명 */

[SCPT] [varchar] (3) NULL , /* 도선종료구간 */

[SCTN] [varchar] (8) NULL , /* 도선종료구간명 */

[STN2] [varchar] (15) NULL , /* 부두명 */

[PLTM] [varchar] (4) NULL , /* 도선예정시간 */

[AGNT] [varchar] (3) NULL , /* 대리점 */

[HAGN] [varchar] (30) NULL , /* 한글코드명 */

[EAGN] [varchar] (50) NULL , /* 영문코드명 */

[GSDV] [varchar] (2) NULL , /* 화물구분 */

[TGBT] [varchar] (14) NULL , /* 배정예선 */

[ETYN] [varchar] (1) NULL , /* 면제선박여부 1.면제, NULL.비면제*/

[PILT] [varchar] (2) NULL , /* 도선사 */

[PTHN] [varchar] (10) NULL , /* 도선사명(한글) */

[PTEN] [varchar] (20) NULL , /* 도선사명(영문) */

[PTSQ] [numeric] (3, 0) NULL , /* 도선순서 */

[CPYN] [varchar] (1) NULL , /* 공동도선여부 */

[CPT1] [varchar] (2) NULL , /* 공동도선사1 */

[C1HN] [varchar] (10) NULL , /* 공동도선사1명(한글) */

[C1EN] [varchar] (20) NULL , /* 공동도선사2명(영문) */

[CPT2] [varchar] (2) NULL , /* 공동도선사2 */

[C2HN] [varchar] (10) NULL , /* 공동도선사2명(한글) */

[C2EN] [varchar] (20) NULL , /* 공동도선사2명(영문) */

[CSCD] [varchar] (3) NULL , /* 공동도선구간코드 */

[CSDV] [varchar] (1) NULL , /* 공동도선구간구분코드 */

[CSPF] [varchar] (3) NULL , /* 공동도선시작코드 */

[CSFN] [varchar] (8) NULL , /* 공동도선시작구간명 */

[CSN2] [varchar] (15) NULL , /* 부두명 */

[CSPT] [varchar] (3) NULL , /* 공동도선종료구간 */

[CSTN] [varchar] (8) NULL , /* 공동도선종료구간명 */

[CST2] [varchar] (15) NULL , /* 부두명 */

[CPTM] [varchar] (4) NULL , /* 공동도선예정시간 */

[RSLT] [varchar] (1) NULL , /* 도선결과 1.정상, 2.취소, 3:사고, 9.기타*/

[FENO] [varchar] (9) NULL , /* 도선번호 */

[CTDT] [varchar] (30) NULL , /* 생성일자 */

[UPDT] [varchar] (30) NULL , /* 처리일자 */

[UPID] [varchar] (8) NULL /* USER ID */

) ON [PRIMARY]

GO



ALTER TABLE [dbo].[PILTBL] WITH NOCHECK ADD

CONSTRAINT [PK_PILTBL] PRIMARY KEY NONCLUSTERED

(

[DTNO],

[STDT],

[SQNO]

) ON [PRIMARY]

GO



공부한다고 치구여...함 봐주세여...

알바쓰라고 하지 말구여....*^^*

저두 알바쓰고 싶은거 있죠...

멋진 오빠들 플리즈.......*^^*

좋은 시간 만들구여...



0  COMMENTS