testsql.pp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. program testsql;
  2. {$mode objfpc}
  3. uses fpodbc,Classes,odbcsql;
  4. var
  5. Conn : TODBCConnection;
  6. St : TODBCSQLStatement;
  7. FieldNames : TStringList;
  8. I,Count : Integer;
  9. procedure DumpFielddef(F : TODBCField);
  10. begin
  11. Writeln('Field ',F.Position,' : ',F.Name);
  12. Writeln('Type : ',F.DataType);
  13. Writeln('Size : ',F.Size);
  14. Writeln('Decimal digits : ',F.DecimalDigits);
  15. Writeln('Nullable : ',F.Nullable);
  16. end;
  17. procedure DumpField(F : TODBCField);
  18. begin
  19. With F do
  20. begin
  21. Write(Name:12,BufType:5,' ');
  22. If IsNull then
  23. Writeln('(Null)')
  24. else
  25. Case BufType of
  26. SQL_Smallint : Writeln(AsInteger);
  27. SQL_Integer : Writeln(AsInteger);
  28. SQL_BIT : Writeln(AsInteger);
  29. SQL_CHAR : Writeln(AsString);
  30. SQL_DOUBLE : Writeln(AsDouble);
  31. SQL_DATE,
  32. SQL_TIME,
  33. SQL_TIMESTAMP,
  34. SQL_TYPE_DATE,
  35. SQL_TYPE_TIMESTAMP,
  36. SQL_TYPE_TIME : Writeln(AsString);
  37. else
  38. Writeln('Unknown field type');
  39. end;
  40. end;
  41. end;
  42. begin
  43. Conn:=TODBCConnection.Create(Nil);
  44. Try
  45. Conn.DSN:='FPC';
  46. Conn.Active:=True;
  47. ST:=TODBCSQLStatement.Create(Conn);
  48. Try
  49. ST.SQL.Text:='Select * from fpdev order by id';
  50. Writeln('Opening');
  51. ST.Open;
  52. Writeln('Opened');
  53. Try
  54. FieldNames:=TStringList.Create;
  55. Try
  56. st.GetFieldList(FieldNames);
  57. Writeln('Found ',FieldNames.Count,' Fields in result set :');
  58. For I:=0 to FieldNames.Count-1 do
  59. Writeln(i+1,': ',FieldNames[i]);
  60. Writeln('End of list');
  61. Writeln('FieldDefs:');
  62. with st.fields do
  63. for I:=0 to COunt-1 do
  64. DumpFielddef(st.fields.items[i] as TODBCField);
  65. Writeln('Data dump:');
  66. Count:=0;
  67. While not st.eof do
  68. begin
  69. Inc(Count);
  70. Writeln('Record no ',Count,' : ');
  71. Writeln('Name':12,'Type':5,' Value');
  72. for I:=0 to st.fields.COunt-1 do
  73. DumpField(st.fields.items[i] as TODBCField);
  74. st.fetch;
  75. end;
  76. Writeln('End of data');
  77. finally
  78. FieldNames.Free;
  79. Writeln('Freed list');
  80. end;
  81. Finally
  82. st.Close;
  83. Writeln('Closed');
  84. end;
  85. Finally
  86. ST.Free;
  87. Writeln('Freed statement');
  88. end;
  89. Conn.Active:=False;
  90. Writeln('Disactivated connection');
  91. Finally
  92. Conn.free;
  93. Writeln('Freed Connection');
  94. end;
  95. end.