testib.pp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. program testib;
  2. uses Ibase, strings;
  3. {$h-}
  4. Const
  5. { Change to YOUR database server }
  6. ServerDb : pchar = 'testdb.gdb';
  7. { CHange to YOUR username and password. These may be empty }
  8. username = '';
  9. PWD = '';
  10. { Don't edit after this }
  11. dbinfo : array [1..3] of byte
  12. = (isc_info_page_size,isc_info_num_buffers,isc_info_end);
  13. query : pchar = 'select * from FPDev;';
  14. flag : array[0..2] of shortint = (0,0,0);
  15. Type
  16. TStatusArray = Array[0..19] of ISC_Status;
  17. Var
  18. DB : Tisc_db_handle;
  19. TA : TISC_tr_handle;
  20. statement : TISC_stmt_handle;
  21. DPB : String;
  22. Status : TStatusArray;
  23. sqlda : PXSQLDA;
  24. name,email : String;
  25. i,id : longint;
  26. fs : longint;
  27. Function CheckIBstatus (Const Status : TStatusArray) : Boolean;
  28. begin
  29. CheckIBstatus:=Not ((Status[0]=1) and (status[1]<>0))
  30. end;
  31. Procedure DoError (Const status : TStatusArray);
  32. begin
  33. Writeln ('Failed:');
  34. isc_print_status(@status);
  35. halt(1);
  36. end;
  37. begin
  38. db:=Nil;
  39. dpb:=chr(isc_dpb_version1);
  40. If UserName<>'' then
  41. begin
  42. dpb:=dpb+chr(isc_dpb_user_name)+chr(length(UserName))+username;
  43. If pwd<>'' then
  44. dpb:=dpb+chr(isc_dpb_password)+chr(length(pwd))+pwd;
  45. end;
  46. Write ('Connecting to ',serverdb,': ');
  47. isc_attach_database(@Status[0],strlen(serverdb),serverdb,@db,length(dpb),@dpb[1]);
  48. if Not CheckIBStatus(Status) then
  49. DoError(status)
  50. else
  51. Writeln ('OK.');
  52. Write ('Starting Transaction : ');
  53. If ISC_start_transaction (@status[0],@ta,1,@db,0,Nil)<>0 then
  54. DoError(Status)
  55. else
  56. Writeln ('OK.');
  57. getmem (sqlda,XSQLDA_Length(3));
  58. sqlda^.sqln:=3;
  59. sqlda^.sqld:=3;
  60. sqlda^.version:=1;
  61. Write('Allocating statement : ');
  62. If isc_dsql_allocate_statement(@status ,@db,@statement)<>0 then
  63. DoError(Status)
  64. else
  65. Writeln ('OK.');
  66. Write ('Preparing statement : ');
  67. if ISC_dsql_prepare(@status,@ta,@statement,0,query,1,sqlda)<>0 then
  68. DoError(Status)
  69. else
  70. Writeln ('OK.');
  71. I:=0;
  72. With sqlda^.sqlvar[i] do
  73. begin
  74. sqldata := @id;
  75. sqltype := sql_long;
  76. sqlind := @flag[0];
  77. end;
  78. inc(i);
  79. With sqlda^.sqlvar[i] do
  80. begin
  81. sqldata := @name[1];
  82. sqltype := sql_text;
  83. sqlind := @flag[1];
  84. end;
  85. inc(i);
  86. With sqlda^.sqlvar[i] do
  87. begin
  88. sqldata := @email[1];
  89. sqltype := sql_text;
  90. sqlind := @flag[2];
  91. end;
  92. Write ('Executing statement : ');
  93. if isc_dsql_execute(@status,@ta,@statement,1,Nil)<>0 then
  94. DoError(Status)
  95. else
  96. Writeln ('OK.');
  97. Writeln ('Fetching rows :');
  98. Repeat
  99. FS:=isc_dsql_fetch(@status,@statement,1,sqlda);
  100. If FS=0 then
  101. begin
  102. I:=255;
  103. While Name[I]=' ' do Dec(i);
  104. setlength(Name,i);
  105. I:=255;
  106. While Email[I]=' ' do Dec(i);
  107. setlength(email,i);
  108. Writeln ('(',ID,',',name,',',email,')');
  109. end;
  110. until FS<>0;
  111. If FS<>100 then
  112. DoError(status)
  113. else
  114. Writeln ('At end.');
  115. Write ('Freeing statement : ');
  116. if isc_dsql_free_statement(@status,@statement,DSQL_Close)<>0 then
  117. DoError(Status)
  118. else
  119. Writeln ('OK.');
  120. Write ('Committing transaction : ');
  121. If ISC_Commit_transaction(@status,@ta)<>0 then
  122. doerror(status)
  123. else
  124. Writeln ('OK.');
  125. Write ('Disconnecting from database: ');
  126. isc_detach_database(@status,@db);
  127. If CheckIBStatus (Status) Then
  128. Writeln ('OK.')
  129. else
  130. doerror(status);
  131. end.