PB常用功能和用法解析

    1. AcceptText :将“漂浮”在数据窗口控件上编辑框的内容放入到数据窗口控件的当前项中

dwcontrol.AcceptText ( ) (dwcontrol:数据窗口控件名)
返回值:integer 成功返回1 出现错误返回-1

注:
插入之前,编辑框中的内容需要经过有效性规则检查;
不要在数据窗口控件的ItemChanged事件处理程序中调用AcceptText()函数。AcceptText()函数还可能触发数据窗口控件的ItemChanged或ItemError事件。

    1. Choose Case:条件分支语句
choose case weight
case ls< 16
Postage=Weight*0.30
CASE ELSE
Postage=25.00
choose end
    1. close:关闭程序

Close事件在触发Deconstructor之前所执行的最后一个事件,CloseQuery事件在Close事件触发之前发生。
设置CloseQuery事件是为了增强可靠性。通常在CloseQuery事件中判断某些工作是否完成,并显示一个提示窗口询问用户,根据用户的确认,返回一个值来决定是否触发窗口的Close事件。
返回值为1,表示取消关闭动作;返回值为0,表示继续执行Close事件。

/*
比如,可以在CloseQuery事件中编写如下脚本,判断是否保存了数据窗口中的修改,并询问用户是否保存数据,根据用户的回答决定是否触发Close事件。在“关闭”按钮上编写脚本Close(parent),然后在CloseQuery中编写如下脚本:
*/
Int li_flag
//如果数据窗口中没有修改,则允许执行Close,直接返回
If dw_user.ModifiedCount() <= 0 And dw_user.DeletedCount() <= 0 Then Return 0
//如果数据窗口有修改,询问用户是否保存
li_flag = MessageBox("提示","数据已经修改,是否保存?",question!,yesnocancel!,1)
Choose Case li_flag //根据用户选择执行
Case 1     //用户选择要保存数据
If dw_user.Update() = 1 Then   //如果修改数据成功
Commit;
//提交
Return 0    //继续执行Close事件
Else            //修改数据不成功
Rollback;
//回退事务
li_flag = MessageBox("提示","数据错误,是否继续关闭!",question!,yesnocancel!,2)         //显示错误
If li_flag = 1 Then
Return 0 //允许关闭
Else
Return 1 //不允许关闭
End If
End If
Case 2 //用户选择不保存数据
Rollback;
//回退事务
Return 0              //允许执行Close事件
Case 3                 //用户选择取消
Return 1              //不允许关闭
End Choose    //用户所有的选择情况处理完毕
    1. CloseWithReturn:带返回值的关闭

closewithreturn(要关闭的窗口,'要返回的值')
要返回的值存在stringparm内,获取方法如下:接收返回的值 = message.stringparm

例:closewithreturn(parent,'abc123')
-------------------------------
String s
s = Message.StringParm
    1. commit 提交
    1. connect;连接数据库
    1. count 计算数据窗口规定的行数
    1. Create函数

使用数据窗口源代码创建数据窗口对象,并将该对象放入指定的数据窗口控件或数据存储对象中。此动态数据窗口对象不会成为应用程序源库的永久部分。

string error_syntaxfromSQL, error_create
string new_sql, new_syntax

new_sql = 'SELECT emp_data.emp_id, ' &
+ 'emp_data.emp_name ' &
+ 'from emp_data ' &
+ 'WHERE emp_data.emp_salary>45000'

new_syntax = SQLCA.SyntaxFromSQL(new_sql, &
'Style(Type=Form)', error_syntaxfromSQL)

IF Len(error_syntaxfromSQL) > 0 THEN
// Display errors
mle_sfs.Text = error_syntaxfromSQL
ELSE
// Generate new DataWindow
dw_new.Create(new_syntax, error_create)
IF Len(error_create) > 0 THEN
mle_create.Text = error_create
END IF
END IF
dw_new.SetTransObject(SQLCA)
dw_new.Retrieve()
    1. Create语句

创建对象使用
用法 objectvariable = CREATE objecttype

transaction DBTrans
DBTrans = CREATE transaction
DBTrans.DBMS = 'ODBC'
    1. dbname 属性:数据库的名字
dbcol = dw_1.Object.emp_id.dbName
    1. DeletedCount 检查数据窗口自上次更新所删除的行数

如果deletedcount()+modifiedcount()> 0 则表明数据窗口有操作

    1. DeleteRow 删除数据窗口的一行
  • 函数功能:删除行, 将被删除的数据从数据窗口的主缓存区移放到删除缓冲区
  • dw_control.DeleteRow(rownumber)
  • dw_name.deleterow(row) \\ 当前行的话为0,其它的为行数
  • row要删除的行号,row=0时删除当前行。成功时返回1,失败时返回-1
  • 实例:删除数据窗口控件的dw_1中的第10行: dw_1.DeleteRow(10)
    1. Describe判断数据窗口指定字段的数据类型
Dw_1.describe(“colname.coltype”) 返回string
    1. destroy语句

在是用create关键字创建对象之后销毁对象,释放destroy dbtrans

    1. Disconnect 断开连接数据库
    1. dwo对象

即为datawindow object 数据窗口对象,数据窗口的即写即现

string ls_name,ls_staffcode
choose case dwo.name
  case 'xf_staffcode'
  ls_staffcode = trim(data) 
  If gnv_data.of_HaveValue( ls_staffcode ) Then
  select xf_name into :ls_name
  from xf_staff
  where xf_staffcode = :ls_staffcode
  using itrans_current;
  this.setitem(row,'xf_name',ls_name)
end choose
    1. error error事件
    1. Filter 按条件过滤数据窗口数据,配合setfilter()使用,先设置过滤条件,再执行过滤
    1. GetClickedRow 得到用户点击的行号
    1. GetItemStatus报告一行中行或者列的修改状态。
  • dw_name.getitemstatus(row\第几行,哪一列,哪个缓冲区)
    缓冲区有三种:primary! delete! filter!
    状态有四种:datamodified! new! newmodified! notmodified!
    1. GetItemString 读取数据窗口中的值,条件是这个值必须是字符
dw_1.getitemstring(1,3) //取得第2行,第4列的值(行列起始从0开始标)
  • 22.GetRow 得到行号
    1. GetSelectedRow 得到选择的行号
    1. GetSqlSelect 获得数据窗口的sql语句
dw_name.getsqlselect()
    1. halt close;先触发关闭事件,关掉主线程并释放资源
    1. idle 在规定的时间内触发事件
idle(60) //如果60秒没有操作的话就触发application对象的idle事件
    1. insertrow 插入新行,该函数有一个返回值,该值为新插入这条记录的行号。
// 用法:
dw_1.insertrow(cur_row) //其中,dw_1为datawindow控件名,cur_row为一具体的行号,在该行前插入一新行。
// 例子:
dw_1.insertrow(4) //将在第4行前插入一条空记录
    1. integer

数据类型:int类型包装类,属于对象
函数:可将字符串转换为integer类型

// 用法:
integer( string a )
// 例子:
integer('123') //把字符串‘123’转换为整数类型
    1. IsNull 判断变量是否为空
// 用法:
isnull( any ) // any为任意类型变量
// 例子:
string ls_a
isnull(ls_a) //判断ls_a是否为空
    1. IsNumber 判断变量是否为数字
// 用法:
isnumber(any) //判断变量any是否为数字,是的话返回true
// 例子:
int a 
string b
a = 123
b = 'abc'
isnumber(a) //返回true
isnumber(b) //返回false
    1. IsNumber 判断变量是否为数字
// 用法:
isnumber(any) //判断变量any是否为数字,是的话返回true
// 例子:
int a 
string b
a = 123
b = 'abc'
isnumber(a) //返回true
isnumber(b) //返回false
    1. isRowModified 是否修改过该行
if dw_1.modifiedcount()+dw_1.deletedcount()>0 then
.......//数据窗口处于修改状态
end if
    1. isRowNew 数据窗口中的if函数,判断行是否是新建的
// 用法:
if(true\false,'为true时返回的值','为false时返回的值',)
// 例子:
if(isrownew(),'新',if(isrowmodified(),'改','旧'))
    1. IsSelected 是否被选中
// 用法:
dw_1.isselected(rownumber)
// 例子:
dw_name.isselected(用循环语句检查每一行是否被选择li_row)
    1. KeyDown 键盘键按下触发
    1. Len 判断字符串长度

用法:
得到Blob类型变量的数据长度,以字节为单位。
Len ( blob )
参 数:blob:Blob类型变量。
返回值:Long。
函数执行成功时返回blob变量的长度,发生错误时返回-1。如果任何参数的值为NULL,则Len()函数返回NULL。
用法:如果在说明Blob类型的变量时指定了变量长度,那么对该变量来说,Len()函数得到的就是这个指定的长度。如果在变量说明时未指定变量长度,那么PowerBuilder在赋值时调整长度,未赋值Blob类型变量的长度为0。

    1. lower&upper 转换大小写
// 用法:将字符串中的大写字母转换为小写字母。
Lower(string)  //转换为小写
    1. Message 系统预设全局变量,窗口之间传递消息使用
    1. MessageBox 提示框
    1. Mid 居中
    1. ModifiedCount 修改的行数
    1. Modify 修改数据窗口相关内容:外观,行为,数据库信息
// 用法:
string dwcontrol.Modify  ( string modstring ) //参数都用string类型传入
// 例子:
dwcontrolname.Modify ( "DataWindow.Color='long'" )
    1. Open 打开窗口
// 用法:
open(windowname)
// 例子:
open(w_1)
    1. OpenWithParm 在打开窗口时传入参数
    1. parent关键字,代词,表示当前组件所在的父组件

用法:
在关闭窗口时用到,在按钮内编辑代码,在使用close(parent)则关闭按钮所在的窗口
例子:
close(parent) //关闭当前组件的所在的窗口

    1. Pos 寻找字符在字符串中的位置

用法:
Pos ( String1,String2 {, start } ) //string1 从这个字符串中查找,string2 要查找的字符串, long 从第几个字符开始查找

long p1,p2
p1 = pos('aabcdaee','a',0) //返回值为0,字符串下标从1开始,不存在时返回0
p2 = pos('aabcdaee','a',3) //返回值为6
    1. PostEvent 延时触发事件
    1. print 打印

用法:
数据窗口名.print() 打印这个数据窗口的内容
例子:
dw_error.print() //打印错误窗口的错误信息

    1. ProfileString 从ini配置文件中提取string数据

用法:
profilestring('文件名,可以包含路径','主要字节','在主要字节下的关键字','如果找不到数据则返回的数据')
例子:
//读取数据库的名称和密码
SQLCA.Database = ProfileString('setup.ini','database','Database','')
SQLCA.LogPass = ProfileString('setup.ini','database','LogPass','')

  • 50.Replace

用法:Replace ( string1, start, n, string2 )
string1:string类型,指定要使用string2替换其中一部分内容的字符串;

start:long类型,指定要从哪个字符位置开始替换字符串,字符串中第一个字符的位置为1,一个中文字符占两个位置
n:long类型,指定要替换多少个字符;
string2:string类型,指定用哪个字符串替换string1的部分字符。
返回值:String。函数执行成功时返回替换后的字符串,发生错误时返回空字符串("")。如果任何参数的值为NULL,Replace()函数返回NULL。
注意:替换中文是,一个中文字符长度是两个字节,占两个位置。要是位置或者长度错误会引起乱码

String name
        Name= ”春眠不倔小”
        Name= Replace(Name , 7 , 4 , “觉晓”)
    1. Reset 清除数据窗口内的数据

用法:dw_name.reset() 将数据窗口控件dw_1中的数据清除。

例子:dw_1.reset() //清除数据窗口dw_1的数据

    1. Retrieve

用法:dw_name.retrieve()
里面可以有参数变量不过要与数据窗口中定义的类型与顺序一样
注:retrieve之前要settransobject()和reset()一下datawindow,初始化数据窗口

dw_1.retrieve() //强制dw_1数据窗口控件从数据库读数据,即从数据库中检索数据。
    1. Right 取字符串右面的字符

用法:right(string s,long n)
rightw()为有中英双字节输入的时候用的
(1) 功能从字符串右端取指定个数字符。
(2) 语法Right ( string, n )
(3) 参数string:string类型,指定要提取子串的字符串 n:long类型,指定子串长度返回值String。
函数执行成功时返回string字符串右边n个字符,发生错误时返回空字符串("")。如果任何参数的值为NULL,Right()函数返回NULL。如果n的值大于string字符串的长度,那么Right()函数返回整个string字符串,但并不增加其它字符。

String s,r1,r2
s = "春眠不觉晓"
r1 = rightw(s,1) //返回 '晓'
r2 = right(s,2) //返回 '晓'
    1. rollback sql语句,使数据库回滚

用法:rollback {using 事务名};
注意,分好不能省略,最好使用事务名
例子:rollback using sqlca;

    1. RowCount 返回数据窗口控件当前可用行数(当前主缓冲区中数据行数)

用法:dw_name.rowcount()
数据窗口控件名.rowcount()
返回值: Long。函数执行成功时返回主缓冲区中数据行数,发生错误时返回-1。如果dwcontrol 的值为 NULL,则 RowCount()函数返回 NULL。

// 例 1. 下面的代码得到数据窗口控件 dw_Employee 中当前可用行的行数:
long NbrRowsNbrRows = dw_Employee.RowCount()

// 例 2. 下面的代码检测用户是否已经滚动到数据窗口控件的末尾。它通过将数据窗口主缓冲区中的行数与数据窗口对象的 LastRowOnPage 属性相比较来得到:
dw_1.ScrollNextPage()
IF dw_1.RowCount() = Integer(dw_1.Describe("DataWindow.LastRowOnPage")) THEN
. . . //  所需的其它处理
END IF
    1. RowsCopy

用法:dw_name.rowscopy(开始行,结束行,缓冲区,要复制到的另一窗口名,在哪一行前面插入,插入哪个缓冲区)

    1. RowsMove

用法:移动行rowsmove( )
dw_name.rowsmove(开始行,结束行,缓冲区,要移动到的另一窗口名,在哪一行前面插入,插入哪个缓冲区)
rowsmove还可以在同一数据窗口的不同缓冲区进行移动行

// 如从删除缓冲区移动行到主缓冲区实现恢复功能:
dw_name.rowsmove(1,dw_name.deletedcrount(),delete!,dw_name,1,primary!)
    1. SaveAs 导出数据

用法:dw_1.saveas(filename,saveastype, colheading )
参数:dw_1为datawindow控件名,
filename为导出的文件名,
saveastype为导出的文件类型,
colheading为是否保存标题。

// 将数据窗口中的数据保存到d盘,取名为cs的文件。要求带标题。
Dw_1.saveas(“d:\cs.txt”,text!,true) // true为带标题。False为不带标题。
    1. ScrollNextPage 向后滚动一页

用法:dw_name.scrollnextpage() \向后滚动一页

    1. ScrollPriorPage 向前滚动一页
    1. ScrollToRow 滚动到指定行

用法:通常配合插入新行使用
dw_name.scrolltorow(dw_name.insertrow(0)) \滚动到插入行

int row
row = dw_1.insertrow(0)
dw_1.scrolltorow(row)
    1. SelectRow 选中或者取消选中数据窗口、DataStore中的一行或者所有行数据。

用法:integer dwcontrol.SelectRow ( long row, boolean select)
ldwcontrol:数据窗口、DataStore或者子数据窗口。
lrow:long类型,要选中或者取消选中的数据行行号。如果该参数为0,表示对所有的数据行进行操作。
lselect:Boolean类型,取值为True表示要选中指定的数据行(不管在执行函数之前是否是选中的);取值为False表示要取消选中指定的数据行(不管执行函数之前是否没有选中)。
返回值:函数执行成功返回1,执行错误返回-1,任何参数为空则返回Null。
注意:该函数的执行不会改变当前数据行。也就是说,如果第2行是当前数据行,执行完该函数,比如dw_1.SelectRow(5),第2行仍然是当前数据行。

// 选择多行的案例,按住ctrl则多行取消、选择,按住shift则选中开始和最后的行
int row
row = dw_1.insertrow(0)
//显示
dw_1.scrolltorow(row)
long ll_Start, ll_End, ll_index
if Row < 1 then return
if KeyDown(KeyControl!) then
if This.IsSelected(Row) then
This.SelectRow(Row,False)
else
This.SelectRow(Row,True)
end if
elseif KeyDown(KeyShift!) then
if Row <il_LastSelectedRow then
   ll_Start = Row
   ll_End =il_LastSelectedRow
else
   ll_Start =il_LastSelectedRow
   ll_End = Row
end if
end if
  • 62.SetFilter 条件查询数据时,设置查询条件

用法:dw_name.setfilter(string con)
参数:dw_name 数据窗口名称
con 过滤的条件,string类型,条件即为sql语句where后面的内容

dw_user.setfilter(var_condition)
  • 63.SetFocus 使控件获得焦点

用法:对象名.setfocus
例子:sle_1.setfocus()

    1. setitem 设置数据窗口的数据

用法:dw_name.setitem(row,'要设置的控件名','要设置进去的数据')
integer dwcontrol.SetItem (long row, integer column, any value )
dwcontrol:要设置数据的数据窗口控件、DataStore或者子数据窗口的名称。
row:要设置数据的行,为long类型。
column:要设置数据的列,可以是string类型的列名称,也可以是integer类型的列号。
lvalue:要设置的数据。类型根据数据列而定,两者的数据类型应该保持一致。
返 回 值:integer类型,1表示函数执行成功,-1表示函数执行失败。如果有任意一个参数为Null,则函数返回Null。

// 第一行的hire_date列中设置数据:
dw_order.SetItem(1, "hire_date", 1993-06-07)
    1. SetItemStatus 设置数据窗口状态

用法:dw_name.setitemstatus(row\第几行,哪一列,哪个缓冲区,设置为哪个状态)
integer dwcontrol.SetItemStatus ( long row, integer column, dwbuffer dwbuffer, dwitemstatus status )

// 设置主缓冲区第五行工资栏的状态为notmodified!
dw_history.SetItemStatus(5, "Salary", Primary!, NotModified!)
    1. SetSort 设置排序规则,通常和sort()函数配合使用

用法:dw_1.setsort(ls_sort)
其中,dw_1为datawindow控件名.ls_sort为排序条件字符串。

Dw_1.setsort(“nl asc”);  //设置以n1列,按升序顺序排(升序用asc,降序用desc)
Dw_1.sort( );   //过滤
    1. SetSqlSelect 设置数据窗口的sql语句

用法:dw_name.setsqlselect()
注:重设sql语句的时候列与类型必须要与原来的一样,where与group by和order by可以不一样

ls_oldsql = dw_name.getsqlselect()
ls_newsql = left(ls_oldsql,pos(lower(ls_oldsql),'where')) +'NewWhereSql'......
dw_name.setsqlselect(ls_newsql)
dw_name.retrieve()
    1. SetTransObject 和retrieve配合使用,连接数据库

用法:数据窗口名.settransobject
dw_name.settransobject(sqlca)

// 设置数据窗口dw_1与数据库连接
dw_1.settransobject(sqlca)
    1. ShareData 共享数据

共享数据窗口的概念,共享数据窗口的实现非常简单,只需一条ShareData()。
例如在Window对象上的两个数据窗口dw-p和dw-s,则可以用dw-p.
ShareData(dw-s)实现二者的数据共享,dw-p称为主数据窗口,而dw-s称为从数据窗口。
从原理上讲,二者实际上所共享的是数据的缓冲区。
缓冲区中的数据首先要从数据库中检索(通过数据窗口Retrieve()函数),而数据库的检索是一种较为"昂贵"的操作,它会加重数据库和网络传输的负荷。
在共享数据窗口情况下,只有主数据窗口检索数据,而从数据窗口通过共享获得数据,无须再检索数据库,
用法:dw_1.sharedate(dwObject)

CONNECT USING SQLCA;
dw_employee.SetTransObject(SQLCA)
dw_employee.Retrieve()
dw_employee.ShareData(dw_dept)
// 要结束共享数据用sharedataoff()
    1. Sort 排序

用法:与setsort()配合使用,在设置了排序格式后,使用此函数进行排序

Dw_1.setsort(“nl asc”);  //设置以n1列,按升序顺序排(升序用asc,降序用desc)
Dw_1.sort( );   //过滤
    1. SQLCA 默认数据库链接变量
dw_name.settransobject(sqlca)链接数据库
sqlca.sqlcode = 0 有数据\\ = 100 无数据
    1. String 转换为字符串

用法:string( blob )
value要转换为string的数据
例子:把日期按照设定格式转换为字符串
string(date,'yyyy-mm-dd')

    1. SyntaxFromSQL 创建一个动态sql

用法:sqlca.syntaxfromsql(sqlselect一条sql语句,窗口风格,报错信息)

    1. TriggerEvent 立即触发事件

用法:对象名.triggerevent()
触发指定对象的指定事件,并且立即执行该事件中的脚本。注意该函数和PostEvent的区别。PostEvent不是立即执行,TriggerEvent是立即执行触发事件的脚本。
objectname.TriggerEvent ( event{, word, long } )
objectname:PB中任何对象或者控件,只要有可以触发的事件就可以。
event:要触发的事件。可以是枚举类型或者String类型。word、long:这两个参数不是必须的,用来传递long或者string类型的数据。
返回值:Integer类型。如果返回1,表示该函数执行成功;如果指定事件中没有脚本或者函数执行错误,则返回-1。当任意参数为Null时,函数返回Null。

cb_1.TriggerEvent(Clicked!)
// 等价于
TriggerEvent(“Clicked”)

w_main.TriggerEvent(“ue_open”,0,’test’)
// 在用户自定义事件ue_open中接收数据:
string ls_msg
ls_msg = String(Message.LongParm,’address’)
    1. Trim 去掉字符串首尾的空格

用法:trim(string) //trimw()为有中英双字节输入的时候用的。

string s = ' 4abb  ' //前面一个空格,后面两个空格
string w = ' 你好  ' //前面一个空格,后面两个空格
trim(s) //返回'4abb'
trim(w) //返回'你好'
    1. Update 数据窗口中数据的保存

用法:Dw_1.update( ) 其中,dw_1为datawindow控件名

// 数据修改后,需要对数据进行保存。
Dw_1.update( ) //该语句有返回值,如果返回1表示更新成功,返回-1表示出错。

原文链接:https://blog.csdn.net/ljlsblog/article/details/81025327

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,928评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,748评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,282评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,065评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,101评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,855评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,521评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,414评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,931评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,053评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,191评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,873评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,529评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,074评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,188评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,491评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,173评论 2 357

推荐阅读更多精彩内容