Open toreal opened 8 years ago
What is your DDL?
create table Texts(Code Memo)
Then you should use string
instead of []byte
maybe.
Thanks
A Memo field can store up to 65,536 characters. But I can not save more than 400 characters in this way.
val:=fmt.Println("こんにちわ世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界こんにちわ世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界こんにちわ世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界こんにちわ世界世界世界世界世界世界世界世界世界世界世界世界世界世界こんにちわ世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界こんにちわ世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界こんにちわ世界世界世界世界世界世界世界世界世界世界世界世界世界世界こんにちわ世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界こんにちわ世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界こんにちわ世界世界世界世界世界世界世界世界世界世界世界世界世界世界こんにちわ世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界こんにちわ世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界こんにちわ世界世界世界世界世界世界世界世界世界世界世界世界世界世界こんにちわ世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界こんにちわ世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界こんにちわ世界世界世界世界世界世界世界世界世界世界世界世界世界世界こんにちわ世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界こんにちわ世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界世界")
_, err = stmt.Exec(val)
I try to modify bind function in this way. Then I can chang input value as [] bye. But it is still no lucky. I still can not process long text.
func (s *AdodbStmt) bind(args []driver.Value) error {
if s.b != nil {
for i, v := range args {
var b string = "?"
if len(s.b) < i {
b = s.b[i]
}
unknown, err := oleutil.CallMethod(s.s, "CreateParameter", b, 12, 1)
if err != nil {
return err
}
param := unknown.ToIDispatch()
defer param.Release()
_, err = oleutil.PutProperty(param, "Value", v)
if err != nil {
return err
}
_, err = oleutil.CallMethod(s.ps, "Append", param)
if err != nil {
return err
}
}
} else {
for i, v := range args {
fmt.Println("in bind:", i, v)
var varval ole.VARIANT
varval.VT = ole.VT_I4
varval.Val = int64(i)
val, err := oleutil.CallMethod(s.ps, "Item", &varval)
if err != nil {
return err
}
item := val.ToIDispatch()
defer item.Release()
t, err := oleutil.GetProperty(item, "Type")
fmt.Println("type:", t.Val)
if t.Val == 202 {
_, err := oleutil.CallMethod(item, "AppendChunk", v)
if err != nil {
fmt.Println("err:", err)
return err
}
} else {
_, err = oleutil.PutProperty(item, "Value", v)
if err != nil {
return err
}
}
}
}
return nil
}
Hmm, seems not work for Memo field.
I had the same problem with alexbrainman/odbc https://github.com/alexbrainman/odbc/issues/106 It was resolved, maybe it can help to understand ?
An other workaround at app level is to cut the memo in parts and update with memofield=memofield+part[n]
With a [ ]byte type, we can read its value from a memo field. But we can not write it back. (Code is a memo field)
sqlstr = "SELECT Code FROM Texts"
rows, err = dbsrc.Query(sqlstr)
defer rows.Close()
if err != nil {
fmt.Println("select", err) }
for rows.Next() {
var Code [] byte
err = rows.Scan(&Code)
_, err = db.Exec("insert into Texts ( Code) values (?)", Code) }