testib40.pp 3.3 KB

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